home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / ZPLK.HAS < prev    next >
Text File  |  1997-01-17  |  53KB  |  2,493 lines

  1. *-----------------------------------------------
  2. *          PCMファイルリンカ
  3. *
  4. *          ZPLK.R
  5. *
  6. *          VERSION 3.00A
  7. *
  8. *         BY Z.NISHIKAWA
  9. *-----------------------------------------------
  10.  
  11.     .cpu    68000
  12.     .include    IOCScall.mac
  13.     .include    DOScall.mac
  14.     .include    version.mac
  15.     .include    z_global.mac
  16.     .text
  17.  
  18. smax:        equ    32        *記述できるソースファイルの最大数
  19. vmax:        equ    300
  20. lmax:        equ    3        *ループの種類(0,1,2,3)
  21. rmax:        equ    65535        *繰り返し数最大値
  22. cmax:        equ    2        *サブ・コンバージョンタイプ(0,1,2)
  23. tbl_size:    equ    128
  24. loop_type:    equ    0    *loop type.w
  25. rept_time:    equ    2    *repeat time.w
  26. conv_type:    equ    4    *conv type.w
  27. fsize:        equ    8    *file size.l
  28. fname:        equ    32    *filename.b
  29.  
  30. print    macro    mes
  31.     move.w    #2,-(sp)
  32.     pea    mes
  33.     DOS    _FPUTS
  34.     addq.w    #6,sp
  35.     endm
  36.  
  37. print2    macro    mes
  38.     pea    mes
  39.     DOS    _PRINT
  40.     addq.w    #4,sp
  41.     endm
  42.  
  43. bprint    macro    mes
  44.     pea    mes
  45.     bsr    bil_prta1_
  46.     addq.w    #4,sp
  47.     endm
  48.  
  49. *--------------- PROGRAM START ---------------
  50.  
  51.     lea    $10(a0),a0        *メモリブロックの変更
  52.     lea.l    user_sp(pc),a1
  53.     suba.l    a0,a1
  54.     pea    (a1)
  55.     pea    (a0)
  56.     DOS    _SETBLOCK
  57.     addq.w    #8,sp
  58.     tst.l    d0
  59.     bmi    out_of_mem
  60.  
  61.     lea    work(pc),a6
  62.     lea    user_sp(pc),sp        *スタック設定
  63.  
  64.     move.l    #256,-(sp)
  65.     DOS    _MALLOC
  66.     addq.l    #4,sp
  67.     move.l    d0,open_fn-work(a6)
  68.  
  69.     move.l    a3,env_bak-work(a6)
  70.  
  71.     print    title(pc)
  72.  
  73.     clr.b    d_name-work(a6)
  74.     lea    s_name_tbl(pc),a0
  75.     move.w    #((smax+1)*tbl_size)/4-1,d0
  76. @@:                    *ワークの初期化
  77.     clr.l    (a0)+
  78.     dbra    d0,@b
  79.  
  80.     moveq.l    #smax,d6
  81.     lea    s_name_tbl(pc),a5
  82.  
  83.     pea    zplk3_opt(pc)        *'zplk3_opt'
  84.     bsr    search_env
  85.     addq.w    #4,sp
  86.     tst.l    d0
  87.     beq    @f
  88.     move.l    a2,-(sp)
  89.     move.l    d0,a2
  90.     bsr    scansw            *オプションスイッチ
  91.     move.l    (sp)+,a2
  92. @@:
  93.     tst.b    (a2)+            *パラメータある?
  94.     beq    show_help
  95.     bsr    scansw
  96.     bra    go_ope
  97.  
  98. scansw:
  99.     * < d6.w=smax
  100.     * < a5.l=s_name_tbl
  101. chk_coml:
  102.     bsr    skip_spc
  103.     move.b    (a2)+,d0
  104.     beq    exit_scansw
  105.     cmpi.b    #'/',d0
  106.     beq    scan_switch
  107.     cmpi.b    #'-',d0
  108.     beq    scan_switch
  109. get_fname:                *ファイルネームの取得
  110.     subq.w    #1,a2
  111.     move.l    a5,a0
  112.     adda.w    #fname,a5
  113. gflp0:
  114.     move.b    (a2)+,d0
  115.     move.b    d0,(a5)+
  116.     bpl    @f
  117.     move.b    (a2)+,(a5)+        *case kanji
  118.     bra    gflp0
  119. @@:
  120.     bsr    fnstr_chk
  121.     bne    gflp0
  122.     clr.b    -(a5)
  123.     subq.w    #1,a2
  124.     lea.l    tbl_size(a0),a5
  125.     dbra    d6,chk_coml
  126.     bra    too_many_s
  127. exit_scansw:
  128.     rts
  129.  
  130. scan_switch:            *最終出力形式の設定
  131.     move.b    (a2)+,d0    *get sw name
  132.     beq    exit_scansw
  133.     bsr    mk_capital
  134.     cmpi.b    #'J',d0
  135.     bne    @f
  136.     st.b    errmes_lang-work(a6)
  137.     bra    chk_coml
  138. @@:
  139.     cmpi.b    #'A',d0
  140.     bne    @f
  141.     st.b    adpout_mode-work(a6)
  142.     moveq.l    #-1,d0
  143.     and.b    p16out_mode(pc),d0    *両方のスイッチ・オンは矛盾
  144.     bne    not_support
  145.     bra    chk_coml
  146. @@:                *ピッチベンド
  147.     cmpi.b    #'B',d0
  148.     bne    cutting
  149.     bsr    chk_num
  150.     bpl    @f
  151.     move.b    (a2),d0
  152.     bsr    mk_capital
  153.     cmpi.b    #'P',d0
  154.     bne    unex_error
  155.     addq.w    #1,a2
  156.     bsr    get_frq_rng
  157.     move.l    d1,s_frq_b-work(a6)
  158.     move.l    d2,d_frq_b-work(a6)
  159.     bra    get_ofb
  160. @@:
  161.     bsr    asc_to_n
  162.     cmpi.l    #65535,d1
  163.     bhi    s_illegal
  164.     move.l    d1,s_frq_b-work(a6)
  165.     beq    s_illegal
  166.     bsr    skip_sep    *skip ','
  167.     bsr    chk_num
  168.     bmi    no_d_error
  169.     bsr    asc_to_n
  170.     cmpi.l    #65535,d1
  171.     bhi    d_illegal
  172.     move.l    d1,d_frq_b-work(a6)
  173.     beq    d_illegal
  174.     cmp.l    s_frq_b(pc),d1    *同じでは意味がない。
  175.     beq    d_illegal
  176. get_ofb:            *オフセットポイントの設定
  177.     bsr    skip_sep    *skip ','
  178.     bsr    chk_num
  179.     bpl    @f
  180.     cmpi.b    #',',(a2)
  181.     bne    chk_coml
  182.     bra    get_b_size
  183. @@:
  184.     bsr    asc_to_n
  185.     btst.l    #0,d1
  186.     bne    b_offset_err
  187.     move.l    d1,b_offset-work(a6)
  188. get_b_size:
  189.     bsr    skip_sep
  190.     bsr    chk_num
  191.     bmi    chk_coml
  192.     bsr    asc_to_n
  193.     btst.l    #0,d1
  194.     bne    b_size_err
  195.     move.l    d1,b_size-work(a6)
  196.     beq    b_size_err
  197.     bra    chk_coml
  198. cutting:            *切り出しオプション
  199.     cmpi.b    #'C',d0
  200.     bne    envchg?
  201.                 *オフセット値
  202.     bsr    chk_num
  203.     bpl    @f
  204.     cmpi.b    #',',(a2)
  205.     bne    unex_error    *意味不明
  206.     bra    get_cutsize
  207. @@:
  208.     bsr    asc_to_n
  209.     btst.l    #0,d1
  210.     bne    cut_offset_illegal
  211.     move.l    d1,cut_offset-work(a6)
  212. get_cutsize:            *切り出しサイズ
  213.     bsr    skip_sep
  214.     bsr    chk_num
  215.     bmi    chk_coml
  216.     bsr    asc_to_n
  217.     btst.l    #0,d1
  218.     bne    cut_size_illegal
  219.     move.l    d1,cut_size-work(a6)
  220.     or.l    cut_offset(pc),d1
  221.     beq    not_support    *両方のパラメータを省略はできない。
  222.     bra    chk_coml
  223. envchg?:            *エンベロープ変更設定
  224.     cmpi.b    #'F',d0
  225.     bne    impulse?
  226.     st.b    fade_mode-work(a6)
  227.                 *オフセット値
  228.     bsr    chk_num
  229.     bpl    @f
  230.     cmpi.b    #',',(a2)
  231.     bne    chk_coml    *意味不明
  232.     bra    get_envlvl
  233. @@:
  234.     bsr    asc_to_n
  235.     btst.l    #0,d1
  236.     bne    env_offset_illegal
  237.     move.l    d1,env_offset-work(a6)
  238. get_envlvl:            *エンベロープ初期/最終音量
  239.     bsr    skip_sep
  240.     bsr    chk_num
  241.     bpl    @f
  242.     cmpi.b    #',',(a2)
  243.     bne    chk_coml    *意味不明
  244.     bra    get_envtype
  245. @@:
  246.     bsr    asc_to_n
  247.     cmpi.l    #127,d1
  248.     bhi    envlvl_illegal
  249.     move.b    d1,env_lvl-work(a6)
  250. get_envtype:            *エンベロープ変更種類
  251.     bsr    skip_sep
  252.     bsr    chk_num
  253.     bmi    chk_coml
  254.     bsr    asc_to_n
  255.     cmpi.l    #1,d1
  256.     bhi    envtype_illegal
  257.     move.b    d1,env_type-work(a6)
  258.     bne    chk_coml
  259.     tst.l    env_offset-work(a6)
  260.     beq    env_offset_illegal    *フェードインでオフセット0はあり得ない
  261.     bra    chk_coml
  262. impulse?:                *たたみ込みを行なうか
  263.     cmpi.b    #'I',d0
  264.     bne    p16otmd?
  265.     st.b    impulse_mode-work(a6)
  266.     bsr    skip_spc
  267.     lea    impulse_name(pc),a1
  268. implp0:
  269.     move.b    (a2)+,d0
  270.     move.b    d0,(a1)+
  271.     bpl    @f
  272.     move.b    (a2)+,(a1)+
  273.     bra    implp0
  274. @@:
  275.     bsr    fnstr_chk
  276.     bne    implp0
  277.     clr.b    -(a1)
  278.     subq.w    #3,a1
  279.     move.b    (a1)+,d0
  280.     bsr    mk_capital
  281.     cmpi.b    #'P',d0
  282.     bne    unid_err
  283.     move.b    (a1)+,d0
  284.     bsr    mk_capital
  285.     cmpi.b    #'C',d0
  286.     bne    impulse_p16?
  287.     move.b    (a1)+,d0
  288.     bsr    mk_capital
  289.     cmpi.b    #'M',d0
  290.     bne    unid_err
  291.     lea    impulse_name(pc),a1
  292.     bsr    read_data2
  293.     pea    (a0)
  294.     move.l    impulse_buff(pc),a0
  295.     move.l    impulse_size(pc),d1
  296.     move.l    d1,d0
  297.     lsl.l    #2,d0
  298.     move.l    d0,impulse_size-work(a6)
  299.     move.l    d0,-(sp)
  300.     DOS    _MALLOC
  301.     addq.l    #4,sp
  302.     move.l    d0,impulse_buff-work(a6)
  303.     bmi    out_of_mem
  304.     move.l    d0,a1
  305.     move.l    d1,d0
  306.     bsr    just_adpcm_to_pcm
  307.     pea    (a0)
  308.     DOS    _MFREE
  309.     addq.w    #4,sp
  310.     move.l    (sp)+,a0
  311.     bra    chk_coml
  312. impulse_p16?:
  313.     cmpi.b    #'1',d0
  314.     bne    unid_err
  315.     cmpi.b    #'6',(a1)+
  316.     bne    unid_err
  317.     lea    impulse_name(pc),a1
  318.     bsr    read_data2
  319.     bra    chk_coml
  320. p16otmd?:
  321.     cmpi.b    #'P',d0
  322.     bne    reverse?
  323.     st.b    p16out_mode-work(a6)
  324.     moveq.l    #-1,d0
  325.     and.b    adpout_mode(pc),d0    *両方のスイッチ・オンは矛盾
  326.     bne    not_support
  327.     bra    chk_coml
  328. reverse?:            *最終逆転
  329.     cmpi.b    #'R',d0
  330.     bne    @f
  331.     st.b    revout_mode-work(a6)
  332.     bra    chk_coml
  333. @@:                *最終音量設定
  334.     cmpi.b    #'V',d0
  335.     bne    @f
  336.     bsr    chk_num
  337.     bmi    no_v_param
  338.     bsr    asc_to_n
  339.     cmpi.l    #vmax,d1
  340.     bhi    v_illegal
  341.     lsl.l    #8,d1
  342.     divu    #100,d1
  343.     move.w    d1,vol_val-work(a6)
  344.     bra    chk_coml
  345. @@:                *最終的に周波数を変換する
  346.     cmpi.b    #'T',d0
  347.     bne    sub_con
  348.     bsr    chk_num
  349.     bpl    @f
  350.     move.b    (a2),d0
  351.     bsr    mk_capital
  352.     cmpi.b    #'P',d0
  353.     bne    unex_error
  354.     addq.w    #1,a2
  355.     bsr    get_frq_rng
  356.     move.l    d1,s_frq-work(a6)
  357.     move.l    d2,d_frq-work(a6)
  358.     bra    get_oft
  359. @@:
  360.     bsr    asc_to_n
  361.     cmpi.l    #65535,d1
  362.     bhi    s_illegal
  363.     move.l    d1,s_frq-work(a6)
  364.     beq    s_illegal
  365.     bsr    skip_sep    *skip ','
  366.     bsr    chk_num
  367.     bmi    no_d_error
  368.     bsr    asc_to_n
  369.     cmpi.l    #65535,d1
  370.     bhi    d_illegal
  371.     move.l    d1,d_frq-work(a6)
  372.     beq    d_illegal
  373.     cmp.l    s_frq(pc),d1    *同じでは意味がない。
  374.     beq    d_illegal
  375. get_oft:            *オフセットポイントの設定
  376.     bsr    skip_sep    *skip ','
  377.     bsr    chk_num
  378.     bpl    @f
  379.     cmpi.b    #',',(a2)
  380.     bne    chk_coml
  381.     bra    get_t_size
  382. @@:
  383.     bsr    asc_to_n
  384.     btst.l    #0,d1
  385.     bne    t_offset_err
  386.     move.l    d1,t_offset-work(a6)
  387. get_t_size:
  388.     bsr    skip_sep
  389.     bsr    chk_num
  390.     bmi    chk_coml
  391.     bsr    asc_to_n
  392.     btst.l    #0,d1
  393.     bne    t_size_err
  394.     move.l    d1,t_size-work(a6)
  395.     beq    t_size_err
  396.     bra    chk_coml
  397. sub_con:            *変換パラメータの設定
  398.     cmpi.b    #'X',d0
  399.     bne    exit_scansw
  400.                 *ループタイプ取り出し
  401.     bsr    chk_num
  402.     bpl    @f
  403.     cmpi.b    #',',(a2)
  404.     bne    unex_error    *意味不明
  405.     bra    get_rept
  406. @@:
  407.     bsr    asc_to_n
  408.     cmpi.l    #lmax,d1
  409.     bhi    l_illegal
  410.     bne    @f
  411.     subq.w    #4,d1        *3 -> -1
  412. @@:
  413.     move.w    d1,loop_type(a5)
  414. get_rept:            *ループ回数の取り出し
  415.     bsr    skip_sep
  416.     bsr    chk_num
  417.     bpl    @f
  418.     cmpi.b    #',',(a2)
  419.     bne    unex_error    *意味不明
  420.     bra    get_srccnv
  421. @@:
  422.     bsr    asc_to_n
  423.     tst.l    d1
  424.     beq    r_illegal
  425.     cmpi.l    #rmax,d1
  426.     bhi    r_illegal
  427.     move.w    d1,rept_time(a5)
  428. get_srccnv:            *ソースファイルのサブ・コンバージョン形式
  429.     bsr    skip_sep
  430.     bsr    chk_num
  431.     bmi    chk_coml
  432.     bsr    asc_to_n
  433.     cmpi.l    #cmax,d1
  434.     bhi    t_illegal
  435.     bne    @f
  436.     subq.w    #3,d1        *2 -> -1
  437. @@:
  438.     move.w    d1,conv_type(a5)    *-1,0,1
  439.     beq    chk_coml    *non touch
  440.     bmi    chk_coml    *to pcm
  441.     tst.w    loop_type(a5)
  442.     beq    chk_coml    *forward
  443.     bra    not_support    *ADPCMのリバースやオルタネートは出来ない
  444.  
  445. get_frq_rng:
  446.     bsr    skip_spc
  447.     moveq.l    #0,d0
  448.     cmpi.b    #'-',(a2)
  449.     bne    @f
  450.     addq.w    #1,a2
  451.     moveq.l    #-1,d0
  452. @@:
  453.     bsr    asc_to_n
  454.     subq.l    #1,d1
  455.     bcs    unex_error    *±0では無意味
  456.     cmpi.l    #143,d1
  457.     bhi    illegal_frq
  458.     add.l    d1,d1
  459.     moveq.l    #0,d2
  460.     move.w    frq_tbl(pc,d1.l),d2
  461.     move.l    #65280,d1
  462.     tst.l    d0
  463.     bmi    @f
  464.     exg.l    d1,d2
  465. @@:
  466.     rts
  467.  
  468. frq_tbl:
  469.     * for i=1 to 144
  470.     *  frq_tbl=(2^-(i/12))*65280
  471.     * next
  472.     dc.w    61616,58158,54894,51813,48905,46160,43569,41124,38816,36637,34581,32640
  473.     dc.w    30808,29079,27447,25906,24452,23080,21785,20562,19408,18319,17290,16320
  474.     dc.w    15404,14539,13723,12953,12226,11540,10892,10281,9704,9159,8645,8160
  475.     dc.w    7702,7270,6862,6477,6113,5770,5446,5140,4852,4580,4323,4080
  476.     dc.w    3851,3635,3431,3238,3057,2885,2723,2570,2426,2290,2161,2040
  477.     dc.w    1926,1817,1715,1619,1528,1442,1362,1285,1213,1145,1081,1020
  478.     dc.w    963,909,858,810,764,721,681,643,606,572,540,510
  479.     dc.w    481,454,429,405,382,361,340,321,303,286,270,255
  480.     dc.w    241,227,214,202,191,180,170,161,152,143,135,128
  481.     dc.w    120,114,107,101,96,90,85,80,76,72,68,64
  482.     dc.w    60,57,54,51,48,45,43,40,38,36,34,32
  483.     dc.w    30,28,27,25,24,23,21,20,19,18,17,16
  484.  
  485. go_ope:                *書き出しファイル名の取り出し
  486.     lea    s_name_tbl+tbl_size(pc),a0
  487.     cmpa.l    a0,a5        *ファイル名パラメータが少なすぎる
  488.     bls    show_help
  489.     suba.w    #tbl_size-fname,a5
  490.     move.l    a5,a4
  491.     lea    d_name(pc),a0
  492. @@:
  493.     move.b    (a5)+,(a0)+
  494.     bne    @b
  495.     clr.b    (a4)        *終了コードとする
  496.  
  497.     lea    s_name_tbl-tbl_size(pc),a5
  498.     moveq.l    #0,d3        *読み込みバッファ最大値
  499.     moveq.l    #0,d4        *サブ・コンバッファ最大値
  500. fsmx_lp:            *最大のファイルサイズはいくつ?
  501.     lea    tbl_size(a5),a5
  502.     tst.b    fname(a5)    *最後かどうか
  503.     beq    get_bff
  504.     lea    fname(a5),a1
  505.     bsr    check_fopen    *>d1.l=fsize
  506.     cmp.l    d3,d1
  507.     bls    @f
  508.     move.l    d1,d3
  509. @@:
  510.     tst.w    conv_type(a5)
  511.     beq    fsmx_lp            *no touch
  512.     bpl    @f
  513.     lsl.l    #2,d1
  514.     bra    fsmx0
  515. @@:
  516.     lsr.l    #2,d1
  517. fsmx0:
  518.     cmp.l    d4,d1
  519.     bls    fsmx_lp
  520.     move.l    d1,d4
  521.     bra    fsmx_lp
  522. get_bff:            *目的のPCMデータを作成する。
  523.     move.l    d3,-(sp)
  524.     DOS    _MALLOC
  525.     addq.l    #4,sp
  526.     move.l    d0,src_temp1-work(a6)
  527.     bmi    out_of_mem
  528.  
  529.     cmp.l    d3,d4
  530.     bcc    @f
  531.     move.l    d3,d4
  532. @@:
  533.     move.l    d4,-(sp)    *サブ・コンバッファ確保
  534.     DOS    _MALLOC
  535.     addq.l    #4,sp
  536.     move.l    d0,src_temp2-work(a6)
  537.     bmi    out_of_mem
  538.                 *テンポラリエリア確保
  539.     move.l    #-1,-(sp)
  540.     DOS    _MALLOC
  541.     addq.w    #4,sp
  542.     andi.l    #$00ffffff,d0
  543.     move.l    d0,a3
  544.     move.l    d0,-(sp)    *取れる限り確保
  545.     DOS    _MALLOC
  546.     addq.w    #4,sp
  547.     move.l    d0,pcm_temp-work(a6)
  548.     bmi    out_of_mem
  549.     move.l    d0,a4        *destination buffer address
  550.     add.l    d0,a3        *mem. block last address
  551.  
  552.     * < a3.l=mem. block last address
  553.     * < a4.l=mem. destination buffer address
  554.     lea    s_name_tbl(pc),a5
  555. mkpcm_lp01:
  556.     tst.b    fname(a5)        *最後かどうか
  557.     beq    temp_clr        *最後なら次の処理へ
  558.     lea    fname(a5),a1
  559.     bsr    read_data        *d1:size d2:address
  560.     tst.w    conv_type(a5)
  561.     beq    non_tch
  562.     bpl    to_adp
  563. to_p16:                    *16bit pcmへ
  564.     move.l    d1,d0            *size
  565.     move.l    d2,a0            *adpcm source
  566.     move.l    src_temp2(pc),a1    *pcm buffer
  567.     lsl.l    #2,d1
  568.     move.l    d1,fsize(a5)        *save size
  569.     move.w    vol_val(pc),d6
  570.     bsr    adpcm_to_pcm
  571.     bra    link_it
  572. to_adp:
  573.     move.l    d1,d0            *size
  574.     move.l    d2,a1            *pcm source
  575.     move.l    src_temp2(pc),a0    *adpcm buffer
  576.     lsr.l    #2,d1
  577.     move.l    d1,fsize(a5)        *save size
  578.     move.l    d0,d1
  579.     btst.l    #0,d1
  580.     bne    size_error        *PCMデータが奇数サイズということはあり得ない。
  581.     lsr.l    d1
  582.     movem.l    d0/a0/a1,-(sp)
  583.     move.w    vol_val(pc),d2
  584. @@:
  585.     move.w    (a1),d0
  586.     muls    d2,d0            *音量変換
  587.     asr.l    #8,d0
  588.     move.w    d0,(a1)+
  589.     subq.l    #1,d1
  590.     bne    @b
  591.     movem.l    (sp)+,d0/a0/a1
  592.     bsr    pcm_to_adpcm
  593.     bra    link_it
  594. non_tch:
  595.     move.l    d2,a1            *source
  596.     move.l    src_temp2(pc),a2    *destination
  597.     move.l    d1,d2            *size
  598.     move.l    d1,fsize(a5)        *save size
  599.     lsr.l    #2,d1
  600.     andi.l    #$0000_0003,d2
  601. @@:
  602.     tst.l    d1
  603.     beq    @f
  604. 1:
  605.     move.l    (a1)+,(a2)+
  606.     subq.l    #1,d1
  607.     bne    1b
  608. @@:
  609.     tst.b    d2
  610.     beq    @f
  611. 1:
  612.     move.b    (a1)+,(a2)+
  613.     subq.b    #1,d2
  614.     bne    1b
  615. @@:
  616. link_it:
  617.     move.w    loop_type(a5),d0
  618.     beq    loop_fwd
  619.     bmi    loop_rev
  620.     subq.w    #1,d0
  621.     beq    loop_alt1
  622. *loop_alt2:                *→←
  623.     move.w    rept_time(a5),d2
  624.     bne    @f            *0は1回と見なす
  625.     addq.w    #1,d2
  626. @@:
  627.     move.l    src_temp2(pc),a1    *source
  628.     move.l    a1,d4
  629.     add.l    fsize(a5),d4        *edge address
  630. **    addq.w    #2,a1
  631.     bsr    do_cnv_fwd
  632.     subq.w    #1,d2
  633.     beq    exit_al2
  634.  
  635.     move.l    src_temp2(pc),d4    *edge address
  636.     move.l    d4,a1
  637.     add.l    fsize(a5),a1        *source
  638. **    subq.w    #2,a1
  639.     bsr    do_cnv_rev
  640.     subq.w    #1,d2
  641.     beq    exit_al2
  642.  
  643.     dbra    d2,@b
  644. exit_al2:
  645.     bra    next_mkpcm
  646.  
  647. loop_fwd:
  648.     move.l    src_temp2(pc),a1    *source
  649.     move.l    a1,d4
  650.     add.l    fsize(a5),d4        *edge address
  651.     move.w    rept_time(a5),d2
  652.     beq    @f            *0は1回と見なす
  653.     subq.w    #1,d2
  654. @@:
  655.     bsr    do_cnv_fwd
  656.     dbra    d2,@b
  657.     bra    next_mkpcm
  658.  
  659. loop_rev:
  660.     move.l    src_temp2(pc),d4    *edge address
  661.     move.l    d4,a1
  662.     add.l    fsize(a5),a1        *source
  663.     move.w    rept_time(a5),d2
  664.     beq    @f            *0は1回と見なす
  665.     subq.w    #1,d2
  666. @@:
  667.     bsr    do_cnv_rev
  668.     dbra    d2,@b
  669.     bra    next_mkpcm
  670.  
  671. loop_alt1:                *←→
  672.     move.w    rept_time(a5),d2
  673.     bne    @f            *0は1回と見なす
  674.     addq.w    #1,d2
  675. @@:
  676.     move.l    src_temp2(pc),d4    *edge address
  677.     move.l    d4,a1
  678.     add.l    fsize(a5),a1        *source
  679. **    subq.w    #2,a1
  680.     bsr    do_cnv_rev
  681.     subq.w    #1,d2
  682.     beq    exit_al1
  683.  
  684.     move.l    src_temp2(pc),a1    *source
  685.     move.l    a1,d4
  686.     add.l    fsize(a5),d4        *edge address
  687. **    addq.w    #2,a1
  688.     bsr    do_cnv_fwd
  689.     subq.w    #1,d2
  690.     beq    exit_al1
  691.  
  692.     dbra    d2,@b
  693. exit_al1:
  694. next_mkpcm:
  695.     lea    tbl_size(a5),a5
  696.     bra    mkpcm_lp01
  697.  
  698. temp_clr:
  699.     move.l    a4,d1
  700.     move.l    pcm_temp(pc),d4
  701.     sub.l    d4,d1
  702.     move.l    d1,-(sp)        *size
  703.     move.l    d4,-(sp)        *address
  704.     DOS    _SETBLOCK
  705.     addq.w    #8,sp
  706.     tst.l    d0
  707.     bmi    out_of_mem
  708.  
  709.     move.l    src_temp1(pc),-(sp)    *テンポラリエリア解放
  710.     DOS    _MFREE
  711.     addq.w    #4,sp
  712.  
  713.     move.l    src_temp2(pc),-(sp)
  714.     DOS    _MFREE
  715.     addq.w    #4,sp
  716. frq_chg?:                *周波数変換
  717.     tst.l    s_frq-work(a6)
  718.     beq    portament?
  719.                     *テンポラリエリア確保
  720.     move.l    pcm_temp(pc),a2
  721.     move.l    a2,src_temp1-work(a6)    *交換
  722.  
  723.     move.l    #-1,-(sp)
  724.     DOS    _MALLOC
  725.     addq.w    #4,sp
  726.     andi.l    #$00ffffff,d0
  727.     move.l    d0,d5
  728.     move.l    d0,-(sp)    *取れる限り確保
  729.     DOS    _MALLOC
  730.     addq.w    #4,sp
  731.     move.l    d0,pcm_temp-work(a6)
  732.     bmi    out_of_mem
  733.     move.l    d0,a1        *a1.l=destination buffer address
  734.     add.l    d0,d5        *d5.l=mem. block end address
  735.                 *a2.l=source pcm data address
  736.                 *パラメータチェック
  737.     move.l    a2,d0        *push a2
  738.     move.l    t_offset(pc),d1
  739.     add.l    a2,d1        *オフセット値が巨大過ぎないか
  740.     bcs    t_offset_err
  741.     move.l    a4,d4
  742.     sub.l    d1,d4        *オフセットが大きすぎないか
  743.     bcs    t_offset_err
  744.     beq    t_offset_err
  745.     move.l    d0,a2        *pop a2
  746.  
  747.     move.l    t_offset(pc),d1
  748.     lsr.l    d1
  749.     beq    frq_chg_ope    *オフセットなし
  750. @@:                *元データ転送
  751.     move.w    (a2)+,(a1)+
  752.     cmp.l    a1,d5
  753.     bls    out_of_mem
  754.     subq.l    #1,d1
  755.     bne    @b
  756. frq_chg_ope:
  757.     move.l    t_size(pc),d4
  758.     bne    @f
  759.                 *サイズ指定がない場合
  760.     move.l    a4,d4
  761.     sub.l    a2,d4
  762.     bra    do_frqchg
  763. @@:                *サイズ指定がある場合
  764.     move.l    d4,d0
  765.     add.l    a2,d0
  766.     cmp.l    a4,d0        *サイズが大きすぎないか
  767.     bhi    t_size_err
  768. do_frqchg:
  769.     lsr.l    d4        *d4.l=data count
  770.     beq    cant_t_err
  771.     move.l    s_frq(pc),d6    *d6.l=source frq
  772.     move.l    d_frq(pc),d7    *d7.l=destination frq
  773.     bsr    do_ajfr        *周波数変換    > a1.l=destination end address
  774.     tst.l    t_size-work(a6)
  775.     beq    mfreetmp1    *サイズ指定がなかった場合はTAIL処理省略
  776. set_tail_ope:            *元データ転送
  777.     move.l    a4,d1
  778.     sub.l    a2,d1
  779.     lsr.l    d1
  780.     beq    mfreetmp1
  781. @@:
  782.     move.w    (a2)+,(a1)+
  783.     cmp.l    a1,d5
  784.     bls    out_of_mem
  785.     subq.l    #1,d1
  786.     bne    @b
  787. mfreetmp1:
  788.     move.l    a1,a4            *辻褄合わせ
  789.     move.l    pcm_temp(pc),d1
  790.     sub.l    d1,a1
  791.  
  792.     move.l    src_temp1(pc),-(sp)
  793.     DOS    _MFREE
  794.     addq.w    #4,sp
  795.  
  796.     pea.l    (a1)            *size
  797.     move.l    d1,-(sp)        *address
  798.     DOS    _SETBLOCK
  799.     addq.w    #8,sp
  800.     tst.l    d0
  801.     bmi    out_of_mem
  802. portament?:                *ポルタメント(オートベンド)
  803.     tst.l    s_frq_b-work(a6)
  804.     beq    truncate?
  805.                     *テンポラリエリア確保
  806.     move.l    pcm_temp(pc),a2
  807.     move.l    a2,src_temp1-work(a6)    *交換
  808.  
  809.     move.l    #-1,-(sp)
  810.     DOS    _MALLOC
  811.     addq.w    #4,sp
  812.     andi.l    #$00ffffff,d0
  813.     move.l    d0,d5
  814.     move.l    d0,-(sp)    *取れる限り確保
  815.     DOS    _MALLOC
  816.     addq.w    #4,sp
  817.     move.l    d0,pcm_temp-work(a6)
  818.     bmi    out_of_mem
  819.     move.l    d0,a1        *a1.l=destination buffer address
  820.     add.l    d0,d5        *d5.l=mem. block end address
  821.                 *a2.l=source pcm data address
  822.                 *パラメータチェック
  823.     move.l    a2,d0        *push a2
  824.     move.l    b_offset(pc),d1
  825.     add.l    a2,d1        *オフセット値が巨大過ぎないか
  826.     bcs    b_offset_err
  827.     move.l    a4,d4
  828.     sub.l    d1,d4        *オフセットが大きすぎないか
  829.     bcs    b_offset_err
  830.     beq    b_offset_err
  831.     move.l    d0,a2        *pop a2
  832.  
  833.     move.l    b_offset(pc),d1
  834.     lsr.l    d1
  835.     beq    portament_ope    *オフセットなし
  836. @@:                *元データ転送
  837.     move.w    (a2)+,(a1)+
  838.     cmp.l    a1,d5
  839.     bls    out_of_mem
  840.     subq.l    #1,d1
  841.     bne    @b
  842. portament_ope:
  843.     move.l    b_size(pc),d4
  844.     bne    @f
  845.                 *サイズ指定がない場合
  846.     move.l    a4,d4
  847.     sub.l    a2,d4
  848.     bra    do_portament
  849. @@:                *サイズ指定がある場合
  850.     move.l    d4,d0
  851.     add.l    a2,d0
  852.     cmp.l    a4,d0        *サイズが大きすぎないか
  853.     bhi    b_size_err
  854. do_portament:
  855.     lsr.l    d4        *d4.l=data count
  856.     beq    cant_b_err
  857.     move.l    s_frq_b(pc),d6    *d6.l=source frq
  858.     move.l    d_frq_b(pc),d7    *d7.l=destination frq
  859.     bsr    do_autobend    *周波数連続変換    > a1.l=destination end address
  860.     tst.l    b_size-work(a6)
  861.     beq    mfreetmp1_b    *サイズ指定がなかった場合はTAIL処理省略
  862. set_tail_ope_b:            *元データ転送
  863.     move.l    a4,d1
  864.     sub.l    a2,d1
  865.     lsr.l    d1
  866.     beq    mfreetmp1_b
  867. @@:
  868.     move.w    (a2)+,(a1)+
  869.     cmp.l    a1,d5
  870.     bls    out_of_mem
  871.     subq.l    #1,d1
  872.     bne    @b
  873. mfreetmp1_b:
  874.     move.l    a1,a4            *辻褄合わせ
  875.     move.l    pcm_temp(pc),d1
  876.     sub.l    d1,a1
  877.  
  878.     move.l    src_temp1(pc),-(sp)
  879.     DOS    _MFREE
  880.     addq.w    #4,sp
  881.  
  882.     pea.l    (a1)            *size
  883.     move.l    d1,-(sp)        *address
  884.     DOS    _SETBLOCK
  885.     addq.w    #8,sp
  886.     tst.l    d0
  887.     bmi    out_of_mem
  888. truncate?:                *切り出し
  889.     move.l    cut_offset(pc),d0
  890.     or.l    cut_size(pc),d0
  891.     beq    rev_ope?
  892.  
  893.     move.l    pcm_temp(pc),a1
  894.     move.l    a1,a2            *destination
  895.     suba.l    a2,a4
  896.     move.l    cut_offset(pc),d2
  897.     cmp.l    a4,d2
  898.     bhi    cut_offset_illegal
  899.     add.l    d2,a1            *source
  900.     move.l    cut_size(pc),d1
  901.     bne    @f
  902.     move.l    a4,d1
  903.     sub.l    d2,d1
  904. @@:
  905.     cmp.l    a4,d1
  906.     bhi    cut_size_illegal
  907.     lea    (a2,d1.l),a4        *辻褄合わせ
  908.     move.l    d1,-(sp)        *size
  909. @@:
  910.     move.b    (a1)+,(a2)+
  911.     subq.l    #1,d1
  912.     bne    @b
  913.     move.l    pcm_temp(pc),-(sp)    *address
  914.     DOS    _SETBLOCK
  915.     addq.w    #8,sp
  916.     tst.l    d0
  917.     bmi    out_of_mem
  918. rev_ope?:                *逆転再生モード
  919.     tst.b    revout_mode-work(a6)
  920.     beq    dis_ope?
  921.  
  922.     move.l    pcm_temp(pc),a1
  923.     move.l    a1,src_temp1-work(a6)    *交換
  924.     move.l    a4,d4
  925.     sub.l    a1,d4
  926.  
  927.     move.l    d4,-(sp)        *size
  928.     DOS    _MALLOC
  929.     addq.w    #4,sp
  930.     move.l    d0,pcm_temp-work(a6)
  931.     bmi    out_of_mem
  932.     move.l    d0,a4
  933.     add.l    d4,a1
  934.     lsr.l    d4
  935. @@:
  936.     move.w    -(a1),(a4)+
  937.     subq.l    #1,d4
  938.     bne    @b
  939.  
  940.     move.l    src_temp1(pc),-(sp)
  941.     DOS    _MFREE
  942.     addq.w    #4,sp
  943. dis_ope?:                *ディストーションモード
  944. *    tst.b    disout_mode-work(a6)
  945. *    beq    env_chg?
  946. *
  947. *    move.l    a4,d4
  948. *    move.l    pcm_temp(pc),a4
  949. *    sub.l    a4,d4
  950. *    lsr.l    d4
  951. *    move.l    #-512,d1
  952. *    move.l    #512,d2
  953. *dislp:
  954. *    move.w    (a4),d0
  955. *    ext.l    d0
  956. *    asl.l    #5,d0
  957. *    cmp.l    d1,d0
  958. *    bge    @f
  959. *    move.w    d1,(a4)+
  960. *    bra    next_dis
  961. *@@:
  962. *    cmp.l    d2,d0
  963. *    ble    @f
  964. *    move.w    d2,(a4)+
  965. *    bra    next_dis
  966. *@@:
  967. *    move.w    d0,(a4)+
  968. *next_dis:
  969. *    subq.l    #1,d4
  970. *    bne    dislp
  971. env_chg?:
  972.     tst.b    fade_mode-work(a6)
  973.     beq    impulse_compound?
  974.  
  975.     pea    (a4)
  976.     move.l    pcm_temp(pc),a1
  977.     suba.l    a1,a4        *source data size
  978.  
  979.     move.l    env_offset(pc),d0
  980.     cmp.l    a4,d0
  981.     bcc    env_offset_illegal
  982.     moveq.l    #0,d5
  983.     tst.b    env_type-work(a6)    *check mode
  984.     bne    @f
  985.                 *case:fade in
  986.     move.l    d0,d1        *fade count*2
  987.     move.b    env_lvl(pc),d5        *get in level
  988.     moveq.l    #1,d7
  989.     bra    calc_fio
  990. @@:                *case:fade out
  991.     add.l    d0,a1        *start point
  992.     move.l    a4,d1
  993.     sub.l    d0,d1        *fade count*2
  994.     move.b    #128,d5
  995.     moveq.l    #-1,d7
  996. calc_fio:
  997.     lsr.l    d1        *fade count
  998.     move.l    #128,d0
  999.     sub.b    env_lvl(pc),d0    *get in/end level
  1000.     move.l    d1,d3
  1001.     bsr    wari        d0.l/d1.l=d0.l...d1.l
  1002.     move.w    d0,d2        *step
  1003.     move.l    d1,d0
  1004.     swap    d0
  1005.     clr.w    d0        *d0=あまり*65536
  1006.     move.l    d3,d1
  1007.     bsr    wari        d0.l/d1.l=d0.l...d1.l
  1008.     tst.l    d1
  1009.     beq    @f
  1010.     addq.w    #1,d0
  1011. @@:
  1012.     move.l    d3,d1
  1013.     * < d0.w=rvs
  1014.     * < d1.l=count
  1015.     * < d2.w=step
  1016.     * < d3.b=rvs work
  1017.     * < d5.b=now out level
  1018.     * < a1.l=address
  1019.     tst.b    d7
  1020.     bpl    @f
  1021.     neg.b    d2        *case:fade out
  1022. @@:
  1023.     moveq.l    #0,d3        *init rvs work
  1024. fio_lp01:
  1025.     move.w    (a1),d6
  1026.     muls    d5,d6
  1027.     asr.l    #7,d6
  1028.     move.w    d6,(a1)+
  1029.     add.b    d2,d5        *add step
  1030.     add.w    d0,d3        *calc revise param.
  1031.     bcc    @f
  1032.     add.b    d7,d5
  1033. @@:
  1034.     subq.l    #1,d1
  1035.     bne    fio_lp01
  1036.  
  1037.     move.l    (sp)+,a4        *辻褄合わせ
  1038. impulse_compound?:            *たたみ込み
  1039.     tst.b    impulse_mode-work(a6)
  1040.     beq    p16out?
  1041.  
  1042.     move.l    pcm_temp(pc),a1
  1043.     move.l    a1,src_temp1-work(a6)    *交換
  1044.     move.l    a4,d4
  1045.     sub.l    a1,d4            *d4=input data size
  1046.  
  1047.     move.l    impulse_size(pc),d5
  1048.     add.l    d4,d5
  1049.     lsl.l    d5
  1050.     subq.l    #4,d5
  1051.     move.l    d5,-(sp)        *size
  1052.     DOS    _MALLOC
  1053.     addq.w    #4,sp
  1054.     move.l    d0,pcm_temp-work(a6)
  1055.     bmi    out_of_mem
  1056.  
  1057.     move.l    d0,a4
  1058.     move.l    d0,a0            *あとで使用
  1059.     move.l    d5,d0            *get size again
  1060.     lsr.l    #2,d0
  1061. @@:
  1062.     clr.l    (a4)+            *zero clear
  1063.     subq.l    #1,d0
  1064.     bne    @b
  1065.  
  1066.     lsr.l    d4            *input data count
  1067. imp_lp0:
  1068.     move.w    (a1)+,d1
  1069.     beq    next_a1_
  1070.     move.l    impulse_buff(pc),a2    *impulse data
  1071.     move.l    impulse_size(pc),d2    *impulse size
  1072.     lsr.l    d2
  1073.     move.l    a0,a4
  1074. imp_lp1:
  1075.     move.w    (a2)+,d0
  1076.     muls.w    d1,d0
  1077.     add.l    d0,(a4)+
  1078.     subq.l    #1,d2
  1079.     bne    imp_lp1
  1080. next_a1_:
  1081.     addq.w    #4,a0
  1082.     subq.l    #1,d4
  1083.     bne    imp_lp0
  1084.  
  1085.     move.l    pcm_temp(pc),a1
  1086.     move.l    a1,a4
  1087.     move.l    a1,d2
  1088.     lsr.l    #2,d5
  1089. @@:
  1090.     move.l    (a1)+,d0
  1091.     swap    d0            */65536
  1092.     move.w    d0,(a4)+
  1093.     subq.l    #1,d5
  1094.     bne    @b
  1095.     move.l    a4,d0
  1096.     sub.l    d2,d0
  1097.  
  1098.     move.l    d0,-(sp)        *size
  1099.     move.l    d2,-(sp)        *address
  1100.     DOS    _SETBLOCK
  1101.     addq.w    #8,sp
  1102.     tst.l    d0
  1103.     bmi    out_of_mem
  1104.  
  1105.     move.l    impulse_buff(pc),-(sp)
  1106.     DOS    _MFREE
  1107.     addq.w    #4,sp
  1108.  
  1109.     move.l    src_temp1(pc),-(sp)
  1110.     DOS    _MFREE
  1111.     addq.w    #4,sp
  1112. p16out?:                *PCMコンバート?
  1113.     tst.b    p16out_mode-work(a6)
  1114.     beq    adpout?
  1115.  
  1116.     move.l    pcm_temp(pc),a1
  1117.     move.l    a1,src_temp1-work(a6)    *交換
  1118.  
  1119.     suba.l    a1,a4
  1120.     move.l    a4,d1
  1121.     lsl.l    #2,d1
  1122.     move.l    d1,-(sp)
  1123.     DOS    _MALLOC
  1124.     addq.w    #4,sp
  1125.     move.l    d0,pcm_temp-work(a6)
  1126.     bmi    out_of_mem
  1127.     move.l    d0,a0            *destination
  1128.     move.l    a4,d0            *adpcm data size
  1129.     lea    (a0,d1.l),a4        *辻褄合わせ
  1130.     exg.l    a0,a1
  1131.     bsr    just_adpcm_to_pcm
  1132.  
  1133.     move.l    src_temp1(pc),-(sp)    *ADPCMデータの解放
  1134.     DOS    _MFREE
  1135.     addq.w    #4,sp
  1136.     bra    generate
  1137. adpout?:
  1138.     tst.b    adpout_mode-work(a6)
  1139.     beq    generate
  1140.  
  1141.     move.l    pcm_temp(pc),a1
  1142.     move.l    a1,src_temp1-work(a6)    *交換
  1143.  
  1144.     suba.l    a1,a4
  1145.     move.l    a4,d1
  1146.     lsr.l    #2,d1
  1147.     move.l    d1,-(sp)
  1148.     DOS    _MALLOC
  1149.     addq.w    #4,sp
  1150.     move.l    d0,pcm_temp-work(a6)
  1151.     bmi    out_of_mem
  1152.     move.l    d0,a0            *destination
  1153.     move.l    a4,d0            *pcm data size
  1154.     lea    (a0,d1.l),a4        *辻褄合わせ
  1155.     bsr    pcm_to_adpcm
  1156.  
  1157.     move.l    src_temp1(pc),-(sp)    *PCMデータの解放
  1158.     DOS    _MFREE
  1159.     addq.w    #4,sp
  1160. generate:
  1161.     lea    d_name(pc),a0
  1162.     move.l    (a0),d0
  1163.     andi.l    #$dfdf_dfff,d0
  1164.     cmpi.l    #$50434d00,d0
  1165.     bne    @f
  1166.     move.w    #%0_000_01,-(sp)
  1167.     pea    (a0)
  1168.     DOS    _OPEN
  1169.     addq.w    #6,sp
  1170.     tst.l    d0
  1171.     bpl    copy_fh
  1172. @@:
  1173.     move.w    #32,-(sp)
  1174.     pea    (a0)
  1175.     DOS    _CREATE
  1176.     addq.w    #6,sp
  1177.     tst.l    d0
  1178.     bmi    wopen_error
  1179. copy_fh:
  1180.     move.w    d0,d5
  1181.  
  1182.     move.l    pcm_temp(pc),d1
  1183.     suba.l    d1,a4
  1184.     pea    (a4)            *size
  1185.     move.l    d1,-(sp)        *address
  1186.     move.w    d5,-(sp)        *filehandle
  1187.     DOS    _WRITE
  1188.     lea    10(sp),sp
  1189.     tst.l    d0
  1190.     bmi    write_error
  1191.     cmp.l    a4,d0            *完全にセーブできたか
  1192.     bne    device_full
  1193.  
  1194.     move.w    d5,-(sp)
  1195.     DOS    _CLOSE
  1196.     addq.w    #2,sp
  1197.  
  1198.     clr.l    -(sp)
  1199.     DOS    _MFREE
  1200.     addq.w    #4,sp
  1201.  
  1202.     print    no_er_mes(pc)
  1203.  
  1204.     DOS    _EXIT
  1205.  
  1206. do_ajfr:
  1207.     * < d4.l=data count
  1208.     * < d5.l=mem.block end address
  1209.     * < d6.w=source frq
  1210.     * < d7.w=destination frq
  1211.     * < a1.l=destination pcm data address
  1212.     * < a2.l=source pcm data address
  1213.     * > a1.l=destination pcm data size
  1214.     * X d0-d7
  1215.     exg.l    d6,d7
  1216.     divu    d6,d7
  1217.     move.w    d7,d1        *d1=step
  1218.     clr.w    d7
  1219.     divu    d6,d7
  1220.     swap    d7
  1221.     tst.w    d7
  1222.     beq    @f
  1223.     add.l    #$0001_0000,d7
  1224.     clr.w    d7
  1225. @@:
  1226.     swap    d7        *d7=revise
  1227.     moveq.l    #0,d3
  1228.     tst.w    d1
  1229.     bne    nz_d1
  1230. doa_lp00:
  1231.     move.w    (a2)+,d0
  1232.     add.w    d7,d3
  1233.     bcc    @f
  1234.     move.w    d0,(a1)+
  1235.     cmp.l    a1,d5
  1236.     bls    out_of_mem
  1237. @@:
  1238.     subq.l    #1,d4
  1239.     bne    doa_lp00
  1240.     bra    exit_doa
  1241. nz_d1:
  1242.     move.w    d1,d6
  1243.     move.w    (a2)+,d0
  1244.     move.w    (a2),d2
  1245.     cmpi.l    #1,d4        *最後かどうか
  1246.     bne    @f
  1247.     move.w    d0,d2
  1248. @@:
  1249.     add.w    d7,d3
  1250.     bcc    @f
  1251.     addq.w    #1,d6
  1252. @@:
  1253.     ext.l    d0
  1254.     ext.l    d2
  1255.     movem.l    d1/d3,-(sp)
  1256.     sub.l    d0,d2
  1257.     divs    d6,d2
  1258.     move.w    d2,d1        *d1=step
  1259.     clr.w    d2
  1260.     divu    d6,d2
  1261.     swap    d2
  1262.     tst.w    d2
  1263.     beq    @f
  1264.     add.l    #$0001_0000,d2
  1265.     clr.w    d2
  1266. @@:
  1267.     swap    d2        *d2=revise
  1268.     moveq.l    #0,d3
  1269. doa_lp01:
  1270.     move.w    d0,(a1)+
  1271.     cmp.l    a1,d5
  1272.     bls    out_of_mem
  1273. @@:
  1274.     add.w    d1,d0
  1275.     add.w    d2,d3
  1276.     bcc    @f
  1277.     tst.w    d1
  1278.     bpl    doa_pls
  1279.     subq.w    #1,d0
  1280.     bra    @f
  1281. doa_pls:
  1282.     addq.w    #1,d0
  1283. @@:
  1284.     subq.w    #1,d6
  1285.     bne    doa_lp01
  1286.     movem.l    (sp)+,d1/d3
  1287.     subq.l    #1,d4
  1288.     bne    nz_d1
  1289. exit_doa:
  1290. *    move.l    a1,d1
  1291.     rts
  1292.  
  1293. do_autobend:
  1294.     * < d4.l=data count
  1295.     * < d5.l=mem.block end address
  1296.     * < d6.w=source frq
  1297.     * < d7.w=destination frq
  1298.     * < a1.l=destination pcm data address
  1299.     * < a2.l=source pcm data address
  1300.     * > a1.l=destination pcm data size
  1301.     * X d0-d7
  1302.     exg.l    d6,d7
  1303.     move.l    d6,atb_frqsrc-work(a6)
  1304.     move.l    d6,atb_frqnow-work(a6)
  1305.                 *周波数変化率計算
  1306.     move.l    d4,d1
  1307.     move.l    d7,d0
  1308.     sub.l    d6,d0
  1309.     bpl    @f
  1310.     neg.l    d0
  1311.     bsr    wari        *d0.l/d1.l=d0.l...d1.l
  1312.     neg.l    d0
  1313.     move.l    d0,atb_step-work(a6)        *周波数変化率
  1314.     move.l    #-1,atb_sgn-work(a6)
  1315.     bra    atb0
  1316. @@:
  1317.     bsr    wari        *d0.l/d1.l=d0.l...d1.l
  1318.     move.l    d0,atb_step-work(a6)        *周波数変化率
  1319.     move.l    #1,atb_sgn-work(a6)
  1320. atb0:
  1321.     swap    d1
  1322.     clr.w    d1
  1323.     move.l    d1,d0
  1324.     move.l    d4,d1
  1325.     bsr    wari        *d0.l/d1.l=d0.l...d1.l
  1326.     tst.l    d1
  1327.     beq    @f
  1328.     addq.l    #1,d0        *revise
  1329. @@:
  1330.     move.w    d0,atb_rvs-work(a6)
  1331.  
  1332.     bsr    calc_frqchgrate
  1333.  
  1334.     moveq.l    #0,d3
  1335.     move.w    d3,atb_rvswk-work(a6)
  1336.  
  1337.     tst.b    atb_sgn-work(a6)
  1338.     bpl    nz_d1_b
  1339. doa_lp00_b:
  1340.     move.w    (a2)+,d0
  1341.     add.w    d7,d3
  1342.     bcc    @f
  1343.     move.w    d0,(a1)+
  1344.     cmp.l    a1,d5
  1345.     bls    out_of_mem
  1346. @@:
  1347.     bsr    calc_frqchgrate
  1348.     subq.l    #1,d4
  1349.     bne    doa_lp00_b
  1350.     bra    exit_doa_b
  1351. nz_d1_b:
  1352.     move.w    d1,d6
  1353.     move.w    (a2)+,d0
  1354.     move.w    (a2),d2
  1355.     cmpi.l    #1,d4        *最後かどうか
  1356.     bne    @f
  1357.     move.w    d0,d2
  1358. @@:
  1359.     add.w    d7,d3
  1360.     bcc    @f
  1361.     addq.w    #1,d6
  1362. @@:
  1363.     ext.l    d0
  1364.     ext.l    d2
  1365.     movem.l    d1/d3,-(sp)
  1366.     sub.l    d0,d2
  1367.     divs    d6,d2
  1368.     move.w    d2,d1        *d1=step
  1369.     clr.w    d2
  1370.     divu    d6,d2
  1371.     swap    d2
  1372.     tst.w    d2
  1373.     beq    @f
  1374.     add.l    #$0001_0000,d2
  1375.     clr.w    d2
  1376. @@:
  1377.     swap    d2        *d2=revise
  1378.     moveq.l    #0,d3
  1379. doa_lp01_b:
  1380.     move.w    d0,(a1)+
  1381.     cmp.l    a1,d5
  1382.     bls    out_of_mem
  1383. @@:
  1384.     add.w    d1,d0
  1385.     add.w    d2,d3
  1386.     bcc    @f
  1387.     tst.w    d1
  1388.     bpl    doa_pls_b
  1389.     subq.w    #1,d0
  1390.     bra    @f
  1391. doa_pls_b:
  1392.     addq.w    #1,d0
  1393. @@:
  1394.     subq.w    #1,d6
  1395.     bne    doa_lp01_b
  1396.     movem.l    (sp)+,d1/d3
  1397.     bsr    calc_frqchgrate
  1398.     subq.l    #1,d4
  1399.     bne    nz_d1_b
  1400. exit_doa_b:
  1401. *    move.l    a1,d1
  1402.     rts
  1403.  
  1404. calc_frqchgrate:            *変換パラメータの計算
  1405.     movem.l    atb_frqsrc(pc),d6-d7
  1406.     add.l    atb_step(pc),d7
  1407.     move.w    atb_rvs(pc),d1
  1408.     add.w    d1,atb_rvswk-work(a6)
  1409.     bcc    @f
  1410.     add.l    atb_sgn(pc),d7
  1411. @@:
  1412.     move.l    d7,atb_frqnow-work(a6)
  1413.  
  1414.     divu    d6,d7
  1415.     move.w    d7,d1        *d1=step
  1416.     clr.w    d7
  1417.     divu    d6,d7
  1418.     swap    d7
  1419.     tst.w    d7
  1420.     beq    @f
  1421.     add.l    #$0001_0000,d7
  1422.     clr.w    d7
  1423. @@:
  1424.     swap    d7        *d7=revise
  1425.     rts
  1426.  
  1427. do_cnv_fwd:
  1428.     * < d4.l=source edge address
  1429.     * < a1.l=source pcm data
  1430.     * < a3.l=destination buffer end address
  1431.     * < a4.l=destination buffer
  1432.     * X a4
  1433.     tst.w    conv_type(a5)
  1434.     beq    @f
  1435.     bpl    do_cnv_fwd_
  1436. @@:
  1437.     movem.l    d0-d1/a1,-(sp)
  1438.     move.w    vol_val(pc),d1
  1439. @@:
  1440.     move.w    (a1)+,d0
  1441.     muls    d1,d0        *音量変換
  1442.     asr.l    #8,d0
  1443.     move.w    d0,(a4)+
  1444.     cmp.l    a3,a4
  1445.     bcc    out_of_mem
  1446.     cmp.l    a1,d4
  1447.     bhi    @b
  1448.     movem.l    (sp)+,d0-d1/a1
  1449.     rts
  1450. do_cnv_fwd_:
  1451.     movem.l    d0/a1,-(sp)
  1452. @@:
  1453.     move.w    (a1)+,(a4)+
  1454.     cmp.l    a3,a4
  1455.     bcc    out_of_mem
  1456.     cmp.l    a1,d4
  1457.     bhi    @b
  1458.     movem.l    (sp)+,d0/a1
  1459.     rts
  1460.  
  1461. do_cnv_rev:
  1462.     * < d4.l=source edge address
  1463.     * < a1.l=source pcm data
  1464.     * < a3.l=destination buffer end address
  1465.     * < a4.l=destination buffer
  1466.     * X a4
  1467.     tst.w    conv_type(a5)
  1468.     beq    @f
  1469.     bpl    do_cnv_rev_
  1470. @@:
  1471.     movem.l    d0-d1/a1,-(sp)
  1472.     move.w    vol_val(pc),d1        *音量変換
  1473. @@:
  1474.     move.w    -(a1),d0
  1475.     muls    d1,d0        *音量変換
  1476.     asr.l    #8,d0
  1477.     move.w    d0,(a4)+
  1478.     cmp.l    a3,a4
  1479.     bcc    out_of_mem
  1480.     cmp.l    d4,a1
  1481.     bhi    @b
  1482.     movem.l    (sp)+,d0-d1/a1
  1483.     rts
  1484. do_cnv_rev_:
  1485.     movem.l    d0/a1,-(sp)
  1486. @@:
  1487.     move.w    -(a1),(a4)+
  1488.     cmp.l    a3,a4
  1489.     bcc    out_of_mem
  1490.     cmp.l    d4,a1
  1491.     bhi    @b
  1492.     movem.l    (sp)+,d0/a1
  1493.     rts
  1494.  
  1495. just_adpcm_to_pcm:        *ピッチチェンジやレベルチェンジを
  1496.                 *行わない単なるADPCM→PCM変換
  1497.     * < a0=adpcm data buffer
  1498.     * < a1=pcm data buffer
  1499.     * < d0.l=adpcm data size
  1500.     movem.l    d0-d7/a0-a6,-(sp)
  1501.     lea    scaleval(pc),a5
  1502.     lea    levelchg(pc),a6
  1503.     moveq.l    #0,d3
  1504.     moveq.l    #0,d7
  1505.     moveq.l    #$0f,d4
  1506.     add.l    d0,d0
  1507.     lea    last_val(pc),a3
  1508.     move.w    d3,(a3)
  1509. __atp_lp:
  1510.     move.b    (a0),d1
  1511.     and.w    d4,d1
  1512.     tst.b    d4
  1513.     bpl    @f
  1514.     lsr.b    #4,d1        *get 4bit data
  1515.     addq.w    #1,a0
  1516. @@:
  1517.     not.b    d4
  1518.     bsr    calc_pcm_val    *実際の計算
  1519.     move.w    d2,(a1)+    *add pcm data to buffer
  1520.     subq.l    #1,d0
  1521.     bne    __atp_lp
  1522.     movem.l    (sp)+,d0-d7/a0-a6
  1523.     rts
  1524.  
  1525. adpcm_to_pcm:            *レベルチェンジを
  1526.                 *行うADPCM→PCM変換
  1527.     * < a0=adpcm data buffer
  1528.     * < a1=pcm data buffer
  1529.     * < d0.l=adpcm data size
  1530.     * < d6.w=volume value 0~256
  1531.     movem.l    d0-d7/a0-a6,-(sp)
  1532.     lea    scaleval(pc),a5
  1533.     lea    levelchg(pc),a6
  1534.     moveq.l    #0,d3
  1535.     moveq.l    #0,d7
  1536.     moveq.l    #$0f,d4
  1537.     add.l    d0,d0
  1538.     lea    last_val(pc),a3
  1539.     move.w    d3,(a3)
  1540. atp_lp:
  1541.     move.b    (a0),d1
  1542.     and.w    d4,d1
  1543.     tst.b    d4
  1544.     bpl    @f
  1545.     lsr.b    #4,d1        *get 4bit data
  1546.     addq.w    #1,a0
  1547. @@:
  1548.     not.b    d4
  1549.     bsr    calc_pcm_val    *実際の計算
  1550.     muls    d6,d2
  1551.     asr.l    #8,d2
  1552.     move.w    d2,(a1)+    *add pcm data to buffer
  1553.     subq.l    #1,d0
  1554.     bne    atp_lp
  1555.     movem.l    (sp)+,d0-d7/a0-a6
  1556.     rts
  1557.  
  1558. pcm_to_adpcm:            *PCMデータをADPCMデータへ変換する
  1559.     * < a0=adpcm data buffer
  1560.     * < a1=pcm data buffer
  1561.     * < d0.l=pcm data size
  1562.     * - all
  1563.  
  1564.     movem.l    d0-d7/a0-a6,-(sp)
  1565.  
  1566.     lea    scaleval(pc),a5
  1567.     lea    levelchg(pc),a6
  1568.  
  1569.     moveq.l    #0,d6        *scalelevel=0
  1570.     moveq.l    #0,d7
  1571.     moveq.l    #0,d4
  1572.     lsr.l    d0
  1573.     lea    last_val(pc),a3
  1574.     move.w    d4,(a3)        *clr.w    (a3)
  1575. pta_lp:
  1576.     move.w    (a1)+,d3    *d3=pcm data
  1577.  
  1578. calc_adpcm_val:
  1579.     * < d3.w=pcm value
  1580.     * < d7.w=scale level
  1581.     * > d1.b=adpcm value
  1582.     * > d7.w=next scale level
  1583.     * X
  1584.     sub.w    (a3),d3        *d3=diff
  1585.     bmi    case_diff_minus
  1586.     moveq.l    #0,d1
  1587.     bra    calc_diff
  1588. case_diff_minus:
  1589.     neg.w    d3
  1590.     moveq.l    #8,d1        *d1:become data
  1591. calc_diff:
  1592.     add.b    d7,d7
  1593.     move.w    (a5,d7.w),d2    *=d
  1594.     lsr.b    d7
  1595.  
  1596.     cmp.w    d3,d2
  1597.     bge    _or2
  1598.     sub.w    d2,d3
  1599.     ori.b    #4,d1
  1600. _or2:
  1601.     lsr.w    d2
  1602.     cmp.w    d3,d2
  1603.     bge    _or1
  1604.     sub.w    d2,d3
  1605.     ori.b    #2,d1
  1606. _or1:
  1607.     lsr.w    d2
  1608.     cmp.w    d3,d2
  1609.     bge    chg_scalelvl
  1610.     ori.b    #1,d1
  1611.  
  1612. chg_scalelvl:
  1613.     add.b    d1,d1
  1614.     add.w    (a6,d1.w),d7        *scalelevl+=levelchg(adpcm value)
  1615.     bmi    rst_sclv_
  1616.     cmpi.w    #48,d7
  1617.     bls    mk_olv
  1618.     moveq.l    #48,d7
  1619.     bra    mk_olv
  1620. rst_sclv_:
  1621.     moveq.l    #0,d7
  1622. mk_olv:
  1623.     exg    d7,d6
  1624.     bsr    calc_pcm_val_
  1625.     exg    d6,d7
  1626. *-----------------------------------------------------------------------------
  1627.     not.b    d4
  1628.     bne    set_lower
  1629.                 *case upper 4bits
  1630.     lsl.b    #3,d1
  1631.     or.b    d1,d5
  1632.     move.b    d5,(a0)+
  1633.     bra    check_cnt
  1634. set_lower:
  1635.     lsr.b    d1
  1636.     move.b    d1,d5
  1637. check_cnt:
  1638.     subq.l    #1,d0
  1639.     bne    pta_lp
  1640.     movem.l    (sp)+,d0-d7/a0-a6
  1641.     rts
  1642.  
  1643. calc_pcm_val:
  1644.     * < d1.b=adpcm value
  1645.     * < d7.w=scale level
  1646.     * > d2.w=pcm value
  1647.     * > d7.w=next scale level
  1648.     * > d1.b=adpcm*2
  1649.     * < a3.l=last_val
  1650.     * X d3 d2
  1651.     add.b    d1,d1
  1652. calc_pcm_val_:
  1653.     add.b    d7,d7
  1654.     move.w    (a5,d7.w),d3    *=d
  1655.     lsr.b    d7
  1656.  
  1657.     move.w    cpv(pc,d1.w),d2
  1658.     jmp    cpv(pc,d2.w)
  1659. abc:
  1660.     add.w    (a3),d2
  1661. *    bsr    chk_ovf
  1662.     move.w    d2,(a3)        *d2=pcmdata
  1663.  
  1664.     add.w    (a6,d1.w),d7        *scalelevl+=levelchg(adpcm value)
  1665.     bmi    rst_sclv
  1666.     cmpi.w    #48,d7
  1667.     bls    allend
  1668.     moveq.l    #48,d7
  1669. allend:
  1670.     rts
  1671. rst_sclv:
  1672.     moveq.l    #0,d7
  1673.     rts
  1674.  
  1675. cpv:
  1676.     dc.w    cpv0000-cpv
  1677.     dc.w    cpv0001-cpv
  1678.     dc.w    cpv0010-cpv
  1679.     dc.w    cpv0011-cpv
  1680.     dc.w    cpv0100-cpv
  1681.     dc.w    cpv0101-cpv
  1682.     dc.w    cpv0110-cpv
  1683.     dc.w    cpv0111-cpv
  1684.     dc.w    cpv1000-cpv
  1685.     dc.w    cpv1001-cpv
  1686.     dc.w    cpv1010-cpv
  1687.     dc.w    cpv1011-cpv
  1688.     dc.w    cpv1100-cpv
  1689.     dc.w    cpv1101-cpv
  1690.     dc.w    cpv1110-cpv
  1691.     dc.w    cpv1111-cpv
  1692.  
  1693. cpv0000:
  1694.     lsr.w    #3,d3
  1695.     move.w    d3,d2
  1696.     bra    abc
  1697. cpv0001:
  1698.     lsr.w    #2,d3
  1699.     move.w    d3,d2
  1700.     lsr.w    d3
  1701.     add.w    d3,d2
  1702.     bra    abc
  1703. cpv0010:
  1704.     lsr.w    d3
  1705.     move.w    d3,d2
  1706.     lsr.w    #2,d3
  1707.     add.w    d3,d2
  1708.     bra    abc
  1709. cpv0011:
  1710.     lsr.w    d3
  1711.     move.w    d3,d2
  1712.     lsr.w    d3
  1713.     add.w    d3,d2
  1714.     lsr.w    d3
  1715.     add.w    d3,d2
  1716.     bra    abc
  1717. cpv0100:
  1718.     move.w    d3,d2
  1719.     lsr.w    #3,d3
  1720.     add.w    d3,d2
  1721.     bra    abc
  1722. cpv0101:
  1723.     move.w    d3,d2
  1724.     lsr.w    #2,d3
  1725.     add.w    d3,d2
  1726.     lsr.w    d3
  1727.     add.w    d3,d2
  1728.     bra    abc
  1729. cpv0110:
  1730.     move.w    d3,d2
  1731.     lsr.w    d3
  1732.     add.w    d3,d2
  1733.     lsr.w    #2,d3
  1734.     add.w    d3,d2
  1735.     bra    abc
  1736. cpv0111:
  1737.     move.w    d3,d2
  1738.     lsr.w    d3
  1739.     add.w    d3,d2
  1740.     lsr.w    d3
  1741.     add.w    d3,d2
  1742.     lsr.w    d3
  1743.     add.w    d3,d2
  1744.     bra    abc
  1745. cpv1000:
  1746.     lsr.w    #3,d3
  1747.     move.w    d3,d2
  1748.     neg.w    d2
  1749.     bra    abc
  1750. cpv1001:
  1751.     lsr.w    #2,d3
  1752.     move.w    d3,d2
  1753.     lsr.w    d3
  1754.     add.w    d3,d2
  1755.     neg.w    d2
  1756.     bra    abc
  1757. cpv1010:
  1758.     lsr.w    d3
  1759.     move.w    d3,d2
  1760.     lsr.w    #2,d3
  1761.     add.w    d3,d2
  1762.     neg.w    d2
  1763.     bra    abc
  1764. cpv1011:
  1765.     lsr.w    d3
  1766.     move.w    d3,d2
  1767.     lsr.w    d3
  1768.     add.w    d3,d2
  1769.     lsr.w    d3
  1770.     add.w    d3,d2
  1771.     neg.w    d2
  1772.     bra    abc
  1773. cpv1100:
  1774.     move.w    d3,d2
  1775.     lsr.w    #3,d3
  1776.     add.w    d3,d2
  1777.     neg.w    d2
  1778.     bra    abc
  1779. cpv1101:
  1780.     move.w    d3,d2
  1781.     lsr.w    #2,d3
  1782.     add.w    d3,d2
  1783.     lsr.w    d3
  1784.     add.w    d3,d2
  1785.     neg.w    d2
  1786.     bra    abc
  1787. cpv1110:
  1788.     move.w    d3,d2
  1789.     lsr.w    d3
  1790.     add.w    d3,d2
  1791.     lsr.w    #2,d3
  1792.     add.w    d3,d2
  1793.     neg.w    d2
  1794.     bra    abc
  1795. cpv1111:
  1796.     move.w    d3,d2
  1797.     lsr.w    d3
  1798.     add.w    d3,d2
  1799.     lsr.w    d3
  1800.     add.w    d3,d2
  1801.     lsr.w    d3
  1802.     add.w    d3,d2
  1803.     neg.w    d2
  1804.     bra    abc
  1805.  
  1806.     .include    fopen.has
  1807.  
  1808. read_data:            *ディスクからの読み込み
  1809.     * < (a1)=file name
  1810.     movem.l    d0/d3/d5/a0-a2,-(sp)
  1811.  
  1812.     move.l    a1,a2
  1813.     bsr    go_fopen
  1814.     tst.l    d5        *d5=file handle
  1815.     bpl    @f
  1816.     bsr    fopen
  1817.     tst.l    d5        *d5=file handle
  1818.     bmi    ropen_error
  1819. @@:
  1820.     bsr    get_fsize
  1821.     bmi    size_error    *illegal file size
  1822.     move.l    d3,d1        *d1.l=size
  1823.  
  1824.     move.l    d1,-(sp)    *size
  1825.     move.l    src_temp1(pc),d2
  1826.     move.l    d2,-(sp)    *address
  1827.     move.w    d5,-(sp)    *file handle
  1828.     DOS    _READ
  1829.     lea    10(sp),sp
  1830.     tst.l    d0
  1831.     bmi    read_error
  1832.  
  1833.     move.w    d5,-(sp)
  1834.     DOS    _CLOSE
  1835.     addq.w    #2,sp
  1836.  
  1837.     movem.l    (sp)+,d0/d3/d5/a0-a2
  1838.     rts
  1839.  
  1840. read_data2:            *インパルスデータのディスクからの読み込み
  1841.     * < (a1)=file name
  1842.     movem.l    d0/d3/d5/a0-a2,-(sp)
  1843.  
  1844.     move.l    a1,a2
  1845.     bsr    go_fopen
  1846.     tst.l    d5        *d5=file handle
  1847.     bpl    @f
  1848.     bsr    fopen
  1849.     tst.l    d5        *d5=file handle
  1850.     bmi    ropen_error_
  1851. @@:
  1852.     bsr    get_fsize
  1853.     bmi    size_error    *illegal file size
  1854.     move.l    d3,d1        *d1.l=size
  1855.  
  1856.     move.l    d1,-(sp)
  1857.     DOS    _MALLOC
  1858.     addq.l    #4,sp
  1859.     move.l    d0,impulse_buff-work(a6)
  1860.     bmi    out_of_mem
  1861.  
  1862.     move.l    d1,-(sp)        *size
  1863.     move.l    impulse_buff(pc),-(sp)    *address
  1864.     move.w    d5,-(sp)        *file handle
  1865.     DOS    _READ
  1866.     lea    10(sp),sp
  1867.     move.l    d0,impulse_size-work(a6)
  1868.     bmi    read_error
  1869.  
  1870.     move.w    d5,-(sp)
  1871.     DOS    _CLOSE
  1872.     addq.w    #2,sp
  1873.  
  1874.     movem.l    (sp)+,d0/d3/d5/a0-a2
  1875.     rts
  1876.  
  1877. check_fopen:            *ファイルが存在するかのチェック
  1878.     * < (a1)=file name
  1879.     * > d1.l=size
  1880.     movem.l    d0/d3/d5/a0-a2,-(sp)
  1881.  
  1882.     move.l    a1,a2
  1883.     bsr    go_fopen
  1884.     tst.l    d5        *d5=file handle
  1885.     bpl    @f
  1886.     bsr    fopen
  1887.     tst.l    d5        *d5=file handle
  1888.     bmi    ropen_error
  1889. @@:
  1890.     bsr    get_fsize
  1891.     bmi    size_error    *illegal file size
  1892.     move.l    d3,d1        *d1.l=size
  1893.  
  1894.     move.w    d5,-(sp)
  1895.     DOS    _CLOSE
  1896.     addq.w    #2,sp
  1897.  
  1898.     movem.l    (sp)+,d0/d3/d5/a0-a2
  1899.     rts
  1900.  
  1901. chk_kanji:
  1902.     tst.b    d0
  1903.     bpl    @f        *normal characters
  1904.     cmpi.b    #$a0,d0        *漢字か
  1905.     bcs    cknj_yes
  1906.     cmpi.b    #$df,d0
  1907.     bls    @f
  1908. cknj_yes:
  1909.     move.w    #CCR_NEGA,ccr    *yes
  1910.     rts
  1911. @@:
  1912.     move.w    #CCR_ZERO,ccr    *no
  1913.     rts
  1914.  
  1915. skip_spc:            *スペースを読み飛ばす(case:command line)
  1916.     cmpi.b    #' ',(a2)+
  1917.     beq    skip_spc
  1918.     subq.w    #1,a2
  1919.     rts
  1920.  
  1921. skip_sep:            *セパレータをスキップする(スペースやタブも)
  1922.     move.l    d0,-(sp)
  1923.     bsr    skip_spc
  1924. @@:
  1925.     move.b    (a2)+,d0
  1926.     cmpi.b    #',',d0
  1927.     beq    @f
  1928.     subq.w    #1,a2
  1929. @@:
  1930.     move.l    (sp)+,d0
  1931.     rts
  1932.  
  1933. mk_capital:            *小文字→大文字(英字以外の場合はそのままthrough out)
  1934.     * < d0.b=letter chr
  1935.     cmpi.b    #'a',d0
  1936.     bcs    @f
  1937.     cmpi.b    #'z',d0
  1938.     bhi    @f
  1939.     andi.w    #$df,d0        *わざと.w
  1940. @@:
  1941.     rts
  1942.  
  1943. chk_num:            *数字かどうかチェック(for command line)
  1944.     * > eq=number
  1945.     * > mi=not num
  1946.     bsr    skip_spc
  1947.     cmpi.b    #'0',(a2)
  1948.     bcs    not_num
  1949.     cmpi.b    #'9',(a2)
  1950.     bhi    not_num
  1951.     move.w    #%0000_0100,ccr    *eq
  1952.     rts
  1953. not_num:
  1954.     move.w    #%0000_1000,ccr    *mi
  1955.     rts
  1956.  
  1957. asc_to_n:            *数字文字列を数値へ
  1958.     * < (a2)=number strings
  1959.     * > d1.l=value
  1960.     * > a2=next
  1961.     * x none
  1962.     movem.l    d0/d2-d3,-(sp)
  1963.     moveq.l    #0,d1
  1964.     moveq.l    #0,d0
  1965.     cmpi.b    #'+',(a2)
  1966.     bne    @f
  1967.     addq.w    #1,a2
  1968. @@:
  1969. num_lp01:
  1970.     move.b    (a2),d0
  1971.     sub.b    #$30,d0
  1972.     bmi    num_exit
  1973.     cmp.b    #9,d0
  1974.     bhi    num_exit
  1975.     addq.w    #1,a2
  1976.     add.l    d1,d1
  1977.     move.l    d1,d3
  1978.     lsl.l    #2,d1
  1979.     add.l    d3,d1        *d1=d1*10
  1980.     add.l    d0,d1        *d1=d1+d0
  1981.     bra    num_lp01
  1982. num_exit:
  1983.     movem.l    (sp)+,d0/d2-d3
  1984.     rts
  1985.  
  1986. wari:                *32ビット/32ビット=32ビット...32ビット
  1987.     * < d0.l/d1.l=d0.l ...d1.l
  1988.     cmpi.l    #$ffff,d1
  1989.     bls    divx        *16ビット以下の数値なら1命令で処理
  1990.     cmp.l    d0,d1
  1991.     beq    div01        *d0=d1商は1
  1992.     bls    div02        *1命令では無理なケース
  1993.  
  1994.     move.l    d0,d1        *商は0余りはd0.l
  1995.     moveq.l    #0,d0
  1996.     rts
  1997. div01:                *商は1余り0
  1998.     moveq.l    #1,d0
  1999.     moveq.l    #0,d1
  2000.     rts
  2001. div02:
  2002.     movem.l    d3-d5,-(sp)
  2003.     move.l    d1,d3
  2004.     clr.w    d3
  2005.     swap    d3
  2006.     addq.l    #1,d3
  2007.     move.l    d0,d4
  2008.     move.l    d1,d5
  2009.     move.l    d3,d1
  2010.     bsr    divx
  2011.     move.l    d5,d1
  2012.     divu    d3,d1
  2013.     divu    d1,d0
  2014.     andi.l    #$ffff,d0
  2015. div03:
  2016.     move.l    d5,d1
  2017.     move.l    d5,d3
  2018.     swap    d3
  2019.     mulu    d0,d1
  2020.     mulu    d0,d3
  2021.     swap    d3
  2022.     add.l    d3,d1
  2023.     sub.l    d4,d1
  2024.     bhi    div04
  2025.     neg.l    d1
  2026.     cmp.l    d1,d5
  2027.     bhi    div05
  2028.     addq.l    #1,d0
  2029.     bra    div03
  2030. div04:
  2031.     subq.l    #1,d0
  2032.     bra    div03
  2033. div05:
  2034.     movem.l    (sp)+,d3-d5
  2035.     rts
  2036. divx:
  2037.     movem.w    d0/d3,-(sp)
  2038.     clr.w    d0
  2039.     swap    d0
  2040.     divu    d1,d0
  2041.     move.w    d0,d3
  2042.     move.w    (sp)+,d0
  2043.     divu    d1,d0
  2044.     swap    d0
  2045.     moveq.l    #0,d1
  2046.     move.w    d0,d1
  2047.     move.w    d3,d0
  2048.     swap    d0
  2049.     move.w    (sp)+,d3
  2050.     rts
  2051.  
  2052. fnstr_chk:            *その文字がファイルネームとして使えるか
  2053.     * < d0.b=data
  2054.     * > eq=can't use
  2055.     * > ne=able to use
  2056.     * - all
  2057.     tst.b    d0
  2058.     bmi    @f
  2059.     movem.l    d0-d1,-(sp)
  2060.     move.l    d0,d1
  2061.     lsr.b    #3,d1
  2062.     ext.w    d1
  2063.     andi.b    #7,d0
  2064.     btst.b    d0,fnstr_tbl(pc,d1.w)
  2065.     movem.l    (sp)+,d0-d1
  2066. @@:
  2067.     rts
  2068.  
  2069. fnstr_tbl:    dc.b    %00000000,%00000000    *00~0f
  2070.         dc.b    %00000000,%00000000    *10~1f
  2071.         dc.b    %01111010,%01000011    *20~2f
  2072.         dc.b    %11111111,%00000111    *30~3f
  2073.         dc.b    %11111111,%11111111    *40~4f
  2074.         dc.b    %11111111,%11010111    *50~5f
  2075.         dc.b    %11111111,%11111111    *60~6f
  2076.         dc.b    %11111111,%11101111    *70~7f
  2077.  
  2078. error_exit:
  2079.     clr.w    -(sp)
  2080.     DOS    _KFLUSH
  2081.     addq.w    #2,sp
  2082.  
  2083.     move.w    #1,-(sp)
  2084.     DOS    _EXIT2
  2085.  
  2086. close_kill:            *書き込もうとしたファイルを消す
  2087.     DOS    _ALLCLOSE
  2088.     pea    d_name(pc)
  2089.     DOS    _DELETE
  2090.     addq.w    #4,sp
  2091.     rts
  2092.  
  2093. show_help:
  2094.     bprint    help(pc)
  2095.     print    more(pc)
  2096.     DOS    _INKEY
  2097.     move.l    #$000d_0002,-(sp)
  2098.     DOS    _FPUTC
  2099.     addq.w    #4,sp
  2100.     bprint    help2(pc)
  2101.     bra    error_exit
  2102.  
  2103. out_of_mem:
  2104.     bsr    close_kill
  2105.     bprint    out_of_mem_mes(pc)
  2106.     bra    error_exit
  2107.  
  2108. write_error:
  2109.     bsr    close_kill
  2110.     bprint    wrt_er_mes(pc)
  2111.     bra    error_exit
  2112.  
  2113. device_full:
  2114.     bsr    close_kill
  2115.     bprint    devful_mes(pc)
  2116.     bra    error_exit
  2117.  
  2118. l_illegal:
  2119.     bprint    l_illegal_mes(pc)
  2120.     bra    error_exit
  2121.  
  2122. r_illegal:
  2123.     bprint    r_illegal_mes(pc)
  2124.     bra    error_exit
  2125.  
  2126. t_illegal:
  2127.     bprint    t_illegal_mes(pc)
  2128.     bra    error_exit
  2129.  
  2130. v_illegal:
  2131.     bprint    v_illegal_mes(pc)
  2132.     bra    error_exit
  2133.  
  2134. too_many_s:
  2135.     bprint    too_many_s_mes(pc)
  2136.     bra    error_exit
  2137.  
  2138. no_v_param:
  2139.     bprint    no_v_param_mes(pc)
  2140.     bra    error_exit
  2141.  
  2142. ropen_error:
  2143.     bprint    open_er_mes(pc)
  2144.     print    fname(a5)
  2145.     print    close_blnkt(pc)
  2146.     bra    error_exit
  2147.  
  2148. ropen_error_:
  2149.     bprint    open_er_mes(pc)
  2150.     print    (a1)
  2151.     print    close_blnkt(pc)
  2152.     bra    error_exit
  2153.  
  2154. wopen_error:
  2155.     bprint    open_er_mes(pc)
  2156.     print    d_name(pc)
  2157.     print    close_blnkt(pc)
  2158.     bra    error_exit
  2159.  
  2160. size_error:
  2161.     bprint    size_er_mes(pc)
  2162.     bra    error_exit
  2163.  
  2164. read_error:
  2165.     bprint    read_er_mes(pc)
  2166.     bra    error_exit
  2167.  
  2168. no_s_error:
  2169.     bprint    no_s_mes(pc)
  2170.     bra    error_exit
  2171.  
  2172. no_d_error:
  2173.     bprint    no_d_mes(pc)
  2174.     bra    error_exit
  2175.  
  2176. s_illegal:
  2177.     bprint    s_illegal_mes(pc)
  2178.     bra    error_exit
  2179.  
  2180. d_illegal:
  2181.     bprint    d_illegal_mes(pc)
  2182.     bra    error_exit
  2183.  
  2184. unex_error:
  2185.     bprint    unex_er_mes(pc)
  2186.     bra    error_exit
  2187.  
  2188. not_support:
  2189.     bprint    not_sup_er_mes(pc)
  2190.     bra    error_exit
  2191.  
  2192. cut_size_illegal:
  2193.     bprint    cutsize_er_mes(pc)
  2194.     bra    error_exit
  2195.  
  2196. cut_offset_illegal:
  2197.     bprint    cutoff_er_mes(pc)
  2198.     bra    error_exit
  2199.  
  2200. env_offset_illegal:
  2201.     bprint    envoff_er_mes(pc)
  2202.     bra    error_exit
  2203.  
  2204. envlvl_illegal:
  2205.     bprint    envlvl_er_mes(pc)
  2206.     bra    error_exit
  2207.  
  2208. envtype_illegal:
  2209.     bprint    envtype_er_mes(pc)
  2210.     bra    error_exit
  2211.  
  2212. t_offset_err:
  2213.     bprint    trnoff_er_mes(pc)
  2214.     bra    error_exit
  2215.  
  2216. t_size_err:
  2217.     bprint    trnsize_er_mes(pc)
  2218.     bra    error_exit
  2219.  
  2220. cant_t_err:
  2221.     bprint    cant_t_er_mes(pc)
  2222.     bra    error_exit
  2223.  
  2224. b_offset_err:
  2225.     bprint    bndoff_er_mes(pc)
  2226.     bra    error_exit
  2227.  
  2228. b_size_err:
  2229.     bprint    bndsize_er_mes(pc)
  2230.     bra    error_exit
  2231.  
  2232. cant_b_err:
  2233.     bprint    cant_b_er_mes(pc)
  2234.     bra    error_exit
  2235.  
  2236. illegal_frq:
  2237.     bprint    illegal_fr_mes(pc)
  2238.     bra    error_exit
  2239.  
  2240. unid_err:
  2241.     bprint    unid_mes(pc)
  2242.     bra    error_exit
  2243.  
  2244. bil_prta1_:                *日本語対応
  2245.     movem.l    d0/a1,-(sp)
  2246.     move.l    4*2+4(sp),a1
  2247.     tst.b    errmes_lang-work(a6)    *0:英語か 1:日本語か
  2248.     beq    prta1_
  2249. @@:                    *次のメッセージをゲット
  2250.     tst.b    (a1)+
  2251.     bne    @b
  2252. prta1_:
  2253.     pea    (a1)
  2254.     DOS    _PRINT
  2255.     addq.w    #4,sp
  2256.     movem.l    (sp)+,d0/a1
  2257.     rts
  2258.  
  2259.     .data
  2260. work:
  2261. title:    dc.b    'Z-MUSIC PCM FILE LINKER '
  2262.     dc.b    $f3,'V',$F3,'E',$F3,'R',$F3,'S',$F3,'I',$F3,'O',$F3,'N'
  2263.     version
  2264.     test
  2265.     dc.b    ' (C) 1993,94,95,96 ZENJI SOFT',13,10,0
  2266. help:    dc.b    '< USAGE > ZPLK.R <[OPTIONS] SOURCE1> [[OPTIONS] SOURCE2~32] <DESTINATION>',13,10
  2267.     dc.b    '< OPTIONAL SWITCHES >',13,10
  2268.     dc.b    '-A            Execute ADPCM conversion before generate the destination.',13,10
  2269.     dc.b    '-B<s,d>[p,s]  Bend the pitch from s(1~65535)[Hz] to d(1~65535)[Hz].',13,10
  2270.     dc.b    '  p           Pitch-bend start point (default=0)',13,10
  2271.     dc.b    '  s           Pitch-bend size',13,10
  2272.     dc.b    '-C[p]<,s>     Truncate the destination.',13,10
  2273.     dc.b    '  p           Truncate start point (default=0)',13,10
  2274.     dc.b    '  s           Truncate size',13,10
  2275.     dc.b    '-F[s,l,m]     Transform the envelope of the destination.',13,10
  2276.     dc.b    '  s           Start point (default=0)',13,10
  2277.     dc.b    '  l           IN/END level (0~127, default=0)',13,10
  2278.     dc.b    '  m           Transform mode (default=1)',13,10
  2279.     dc.b    '              0 Fade in',13,10
  2280.     dc.b    '              1 Fade out',13,10
  2281.     dc.b    '-I<filename>  Convolute the destination with impulse data.',13,10
  2282.     dc.b    '  filename    Filename of the impulse data',13,10
  2283.     dc.b    '-J            Messages will be displayed in Japanese.',13,10
  2284.     dc.b    0
  2285.         dc.b    '< 使用方法 > ZPLK.R <[オプション] 入力ファイル名1> [[オプション] 入力ファイル名2~32] <出力ファイル名>',13,10
  2286.         dc.b    '< オプション >',13,10
  2287.         dc.b    '-A         出力ファイルを出力する前にそのデータを16ビットPCMデータと',13,10
  2288.         dc.b    '           見なしてADPCMデータへ変換する。',13,10
  2289.         dc.b    '-Bs,d,p,s  出力ファイルを出力する前にそのデータを16ビットPCMデータと',13,10
  2290.         dc.b    '           見なしてポルタメントを行なう。(連続的に滑らかに周波数変更を行なう。)',13,10
  2291.         dc.b    '  s        開始時の周波数をs[Hz]とみなす。ただしsは1~65535。',13,10
  2292.         dc.b    '  d        終了時の周波数をd[Hz]とする。ただしdは1~65535。',13,10
  2293.         dc.b    '  p        出力ファイルのpバイト目から周波数変換を行なう。省略時はp=0。',13,10
  2294.         dc.b    '  s        変換するサイズをsバイトとする。省略時はpで指定された位置から',13,10
  2295.         dc.b    '           後ろ全部を変換対象領域とする。pも省略した場合は出力全域に対して',13,10
  2296.         dc.b    '           変換処理を施す。',13,10
  2297.         dc.b    '-Cp,s      出力ファイルを出力する前にそのデータの任意の一部分を摘出しそれを',13,10
  2298.         dc.b    '           出力する。',13,10
  2299.         dc.b    '  p        出力ファイルのpバイト目から切り出す。省略時はp=0。',13,10
  2300.         dc.b    '  s        切り出すサイズをsバイトとする。省略時はpで指定された位置から',13,10
  2301.         dc.b    '           後ろ全部を切り出す。pも省略した場合はエラーとなる。',13,10
  2302.         dc.b    '-Fs,l,m    出力ファイルを出力する前にそのデータを16ビットPCMデータと',13,10
  2303.         dc.b    '           見なしてエンベロープの形状を変化させる。',13,10
  2304.         dc.b    '  s        出力ファイルのsバイト目からエンベロープ形状を変更する。',13,10
  2305.         dc.b    '           省略時はs=0。',13,10
  2306.         dc.b    '  l        エンベロープ形状初期音量(m=0時)/最終音量(m=1時)を0~127の128段階で',13,10
  2307.         dc.b    '           設定する。省略時はl=0。',13,10
  2308.         dc.b    '  m        エンベロープの変更パターンを設定する。省略時はm=1',13,10
  2309.         dc.b    '           0 フェード・イン・タイプ',13,10
  2310.         dc.b    '           1 フェード・アウト・タイプ',13,10
  2311.     dc.b    0
  2312. help2:
  2313.     dc.b    '-P            Execute 16bit PCM conversion before generate the destination.',13,10
  2314.     dc.b    '-R            Generate the destination in reversive sequence.',13,10
  2315.     dc.b    '-V<n>         Set n(1~300)[%] for an output level.(default=100)',13,10
  2316.     dc.b    '-T<i,o>[,p,s] Transform the frequency from i(1~65535)[Hz] to o(1~65535)[Hz].',13,10
  2317.     dc.b    '  p           Transformation start point.(default=0)',13,10
  2318.     dc.b    '  s           Transformation size',13,10
  2319.     dc.b    '-X[l,r,t]     Define SUB-CONVERSION parameter',13,10
  2320.     dc.b    '  l           Loop type (default=0)',13,10
  2321.     dc.b    '              0 Forward',13,10
  2322.     dc.b    '              1 Alternative #1(←→)',13,10
  2323.     dc.b    '              2 Alternative #2(→←)',13,10
  2324.     dc.b    '              3 Reversive',13,10
  2325.     dc.b    '  r           Repeat r(1~65535) times by type l scan.(default=1)',13,10
  2326.     dc.b    '  t           Type of the source prior conversion.(default=0)',13,10
  2327.     dc.b    '              0 No Conversion',13,10
  2328.     dc.b    '              1 Regard the given source as 16bit PCM data,',13,10
  2329.     dc.b    '                convert it to ADPCM before link operation.',13,10
  2330.     dc.b    '              2 Regard the given source as ADPCM data,',13,10
  2331.     dc.b    '                convert it to 16bit PCM data before link operation.',13,10
  2332.     dc.b    0
  2333.         dc.b    '-Ifilename インバルスデータのファイルネームを与えると出力ファイル出力する前に',13,10
  2334.         dc.b    '          そのデータとのたたみ込み演算を行なう。ただし、与えられたファイルネームの',13,10
  2335.         dc.b    "           拡張子を'.P16'とした場合はそのインパルスデータを16ビットPCMデータ、",13,10
  2336.         dc.b    "           '.PCM'とした場合はADPCMデータとしてみなす。",13,10
  2337.     dc.b    '-J         日本語メッセージ表示',13,10
  2338.         dc.b    '-P         出力ファイルを出力する前にそのデータをADPCMデータと見なして',13,10
  2339.         dc.b    '           16ビットPCMデータへ変換する。',13,10
  2340.         dc.b    '-R         出力ファイルを出力する前にそのデータを16ビットPCMデータと',13,10
  2341.         dc.b    '           見なして逆転させる。',13,10
  2342.         dc.b    '-Vn        出力ファイルを出力する前にそのデータの音量をパーセント単位で',13,10
  2343.         dc.b    '           指定する。nの範囲は0~300。スイッチ無指定や値省略時は100とする。',13,10
  2344.         dc.b    '-Ti,o,p,s  出力ファイルを出力する前にそのデータを16ビットPCMデータと',13,10
  2345.         dc.b    '           見なして周波数の変更を行なう。',13,10
  2346.         dc.b    '  i        元の周波数をs[Hz]とみなす。ただしsは1~65535。',13,10
  2347.         dc.b    '  o        変換後の周波数をd[Hz]とする。ただしdは1~65535。',13,10
  2348.         dc.b    '  p        出力ファイルのpバイト目から周波数変換を行なう。省略時はp=0。',13,10
  2349.         dc.b    '  s        変換するサイズをsバイトとする。省略時はpで指定された位置から',13,10
  2350.         dc.b    '           後ろ全部を変換対象領域とする。pも省略した場合は出力全域に対して',13,10
  2351.         dc.b    '           変換処理を施す。',13,10
  2352.         dc.b    '-Xl,r,t    リンク制御',13,10
  2353.         dc.b    '  l        ループタイプの設定。省略時 l=0。',13,10
  2354.         dc.b    '           0 そのまま。',13,10
  2355.         dc.b    '           1 清純、逆順の順にループさせる。',13,10
  2356.         dc.b    '           2 逆順、清純の順にループさせる。',13,10
  2357.         dc.b    '           3 入力ファイルの逆順をループさせる。',13,10
  2358.         dc.b    '  r        反復回数の設定。省略時 r=1。範囲1~65535。',13,10
  2359.         dc.b    '  t        リンク作業の前に入力ファイルに対して加工を行なう。省略時 t=0。',13,10
  2360.         dc.b    '           0 何も行なわない。',13,10
  2361.         dc.b    '           1 入力ファイルを16ビットPCMデータと見なしてADPCMデータへ変換する。',13,10
  2362.         dc.b    '           2 入力ファイルをADPCMデータと見なして16ビットPCMデータへ変換する。',13,10
  2363.     dc.b    0
  2364. more:        dc.b    '-more-',0
  2365. no_er_mes:    dc.b    $1b,'[mOperations are all set.',13,10
  2366.         dc.b    'A ',$1b,'[37m','♪SOUND',$1b,'[m mind in a '
  2367.         dc.b    $1b,'[37mSOUND',$1b,'[m',' body.',13,10,0
  2368. out_of_mem_mes:    dc.b    'Out of memory.',13,10,0
  2369.         dc.b    'メモリ不足です',13,10,0
  2370. wrt_er_mes:    dc.b    'File write error.',13,10,0
  2371.         dc.b    'ファイル書き出しエラー',13,10,0
  2372. devful_mes:    dc.b    'Device full.',13,10,0
  2373.         dc.b    'ディスク容量が不足しています',13,10,0
  2374. l_illegal_mes:    dc.b    'Illegal loop type parameter.',13,10,0
  2375.         dc.b    'ループタイプが規定外です',13,10,0
  2376. r_illegal_mes:    dc.b    'Illegal repeat time parameter.',13,10,0
  2377.         dc.b    'リピート回数が規定外です',13,10,0
  2378. t_illegal_mes:    dc.b    'Undefined prior conversion.',13,10,0
  2379.         dc.b    '未定義のサブコンバージョンを指定しました',13,10,0
  2380. v_illegal_mes:    dc.b    'ILLEGAL VOLUME PARAMETER.',13,10,0
  2381.         dc.b    '音量値が異常です',13,10,0
  2382. too_many_s_mes:    dc.b    'Too many source files.',13,10,0
  2383.         dc.b    '入力ファイルの数が多すぎます',13,10,0
  2384. no_v_param_mes:    dc.b    'NO VOLUME PARAMETER.',13,10,0
  2385.         dc.b    '音量値がありません',13,10,0
  2386. open_er_mes:    dc.b    'File open error. "',0
  2387.         dc.b    '指定ファイルを開けません。"',0
  2388. close_blnkt:    dc.b    '"',13,10,0
  2389. size_er_mes:    dc.b    'Illegal file size',13,10,0
  2390.         dc.b    'ファイルサイズが異常です',13,10,0
  2391. read_er_mes:    dc.b    'File read error.',13,10,0
  2392.         dc.b    'ファイルの読み込みに失敗しました',13,10,0
  2393. no_s_mes:    dc.b    'No source frequency parameter.',13,10,0
  2394.         dc.b    '変換元周波数値が指定されていません',13,10,0
  2395. no_d_mes:    dc.b    'No destination frequency parameter.',13,10,0
  2396.         dc.b    '変換先周波数値が指定されていません',13,10,0
  2397. s_illegal_mes:    dc.b    'Illegal source frequency parameter.',13,10,0
  2398.         dc.b    '規定外の変換元周波数値が指定されています',13,10,0
  2399. d_illegal_mes:    dc.b    'Illegal destination frequency parameter.',13,10,0
  2400.         dc.b    '規定外の変換先周波数値が指定されています',13,10,0
  2401. unex_er_mes:    dc.b    'Unexpected parameter has established.',13,10,0
  2402.         dc.b    '予期しないパラメータを指定しました',13,10,0
  2403. not_sup_er_mes:    dc.b    "ZPLK3.R doesn't support the combination of these parameters.",13,10,0
  2404.         dc.b    '処理出来ないパラメータの組み合わせが設定されています',13,10,0
  2405. cutsize_er_mes:    dc.b    'Illegal truncate offset value.',13,10,0
  2406.         dc.b    '規定外の切り出しオフセットを指定しました',13,10,0
  2407. cutoff_er_mes:    dc.b    'Illegal truncate size.',13,10,0
  2408.         dc.b    '規定外の切り出しサイズを指定しました',13,10,0
  2409. envoff_er_mes:    dc.b    'Illegal ENVELOPE-REFORM offset value.',13,10,0
  2410.         dc.b    '規定外のエンベロープ加工オフセット値を指定しました',13,10,0
  2411. envlvl_er_mes:    dc.b    'Illegal ENVELOPE-REFORM IN/OUT level.',13,10,0
  2412.         dc.b    '規定外のエンベロープ加工開始/終了レベルを指定しました',13,10,0
  2413. envtype_er_mes:    dc.b    'Illegal ENVELOPE-REFORM type',13,10,0
  2414.         dc.b    '規定外のエンベロープ加工種別を指定しました',13,10,0
  2415. trnoff_er_mes:    dc.b    'Illegal frequency transformation offset value.',13,10,0
  2416.         dc.b    '規定外の周波数変換オフセットを指定しました',13,10,0
  2417. trnsize_er_mes:    dc.b    'Illegal frequency transformation size.',13,10,0
  2418.         dc.b    '規定外の周波数変換サイズを指定しました',13,10,0
  2419. cant_t_er_mes:    dc.b    'Frequency transformation unsuccessful.',13,10,0
  2420.         dc.b    '周波数変換処理が失敗しました',13,10,0
  2421. bndoff_er_mes:    dc.b    'Illegal PITCH-BEND offset value.',13,10,0
  2422.         dc.b    '規定外のピッチベンド・オフセットを指定しました',13,10,0
  2423. bndsize_er_mes:    dc.b    'Illegal PITCH-BEND size.',13,10,0
  2424.         dc.b    '規定外のピッチベンド・サイズを指定しました',13,10,0
  2425. cant_b_er_mes:    dc.b    'PITCH-BEND processing unsuccessful.',13,10,0
  2426.         dc.b    'ピッチベンド処理が失敗しました',13,10,0
  2427. illegal_fr_mes:    dc.b    'Frequency parameter out of range.',13,10,0
  2428.         dc.b    '周波数値が許容範囲を超えています',13,10,0
  2429. unid_mes:    dc.b    'Unidentified file.',13,10,0
  2430.         dc.b    '正体不明のファイルです',13,10,0
  2431.  
  2432. zplk3_opt:    dc.b    'zplk3_opt',0
  2433. p16out_mode:    dc.b    0
  2434. adpout_mode:    dc.b    0
  2435. revout_mode:    dc.b    0
  2436. env_lvl:    dc.b    0    *エンベロープ変更の音量パラメータ
  2437. env_type:    dc.b    1    *エンベロープ変更の種類
  2438. fade_mode:    dc.b    0
  2439. impulse_mode:    dc.b    0
  2440. errmes_lang:    dc.b    0    *[0]:english,1:Japanese
  2441.     .even
  2442. vol_val:    dc.w    256
  2443. s_frq:        dc.l    0    *source frq
  2444. d_frq:        dc.l    0    *destination frq
  2445. env_offset:    dc.l    0    *エンベロープ変更の開始ポイント
  2446. cut_offset:    dc.l    0    *切り出しオフセット
  2447. cut_size:    dc.l    0    *切り出しサイズ
  2448. t_offset:    dc.l    0    *ピッチ変更オフセット値
  2449. t_size:        dc.l    0    *ピッチ変更サイズ
  2450. s_frq_b:    dc.l    0    *pitch bend source frq
  2451. d_frq_b:    dc.l    0    *pitch bend destination frq
  2452. b_offset:    dc.l    0    *ピッチベンド・オフセット値
  2453. b_size:        dc.l    0    *ピッチベンド・サイズ
  2454.  
  2455. scaleval:
  2456.     dc.w     16,17,19,21,23,25,28
  2457.     dc.w     31,34,37,41,45,50,55
  2458.     dc.w     60,66,73,80,88,97,107
  2459.     dc.w     118,130,143,157,173,190,209
  2460.     dc.w     230,253,279,307,337,371,408
  2461.     dc.w     449,494,544,598,658,724,796
  2462.     dc.w     876,963,1060,1166,1282,1411,1552
  2463. levelchg:
  2464.     dc.w    -1,-1,-1,-1,2,4,6,8
  2465.     dc.w    -1,-1,-1,-1,2,4,6,8
  2466.  
  2467.     .even
  2468.     .bss    
  2469. s_name_tbl:    rept    smax+1
  2470.         ds.b    tbl_size
  2471.         endm
  2472. pcm_temp:    ds.l    1    *PCM BUFFER
  2473. src_temp1:    ds.l    1    *SOURCE PCM BUFFER
  2474. src_temp2:    ds.l    1    *SUB CONVERTED PCM BUFFER
  2475. last_val:    ds.w    1    *ADPCM変換ワーク
  2476. atb_step:    ds.l    1    *autobend work
  2477. atb_rvs:    ds.w    1    *autobend work
  2478. atb_rvswk:    ds.w    1    *autobend work
  2479. atb_frqsrc:    ds.l    1    *autobend work
  2480. atb_frqnow:    ds.l    1    *autobend work
  2481. atb_sgn:    ds.l    1    *autobend work
  2482. env_bak:    ds.l    1
  2483. impulse_buff:    ds.l    1
  2484. impulse_size:    ds.l    1
  2485. fopen_name:    ds.l    1    *fopenで取り扱った最後のファイル名
  2486. open_fn:    ds.l    1
  2487.     .even
  2488. d_name:        ds.b    91
  2489. impulse_name:    ds.b    91
  2490.     .even
  2491.         ds.l    1024
  2492. user_sp:
  2493.